合并两个数据帧,并将两列都保留在R中



我有两个数据帧。

a <- structure(list(sd.3.IID = structure(c(7L, 1L, 4L, 6L, 2L, 9L, 
3L, 8L, 10L, 5L), .Label = c("0_62000_1", "0_62004_5", "0_62070_19", 
"0_62070_23", "0_62070_27", "0_62070_33", "ADNI_1092", "ADNI_1263", 
"ADNI_1283", "ADNI_1334"), class = "factor")), row.names = c(NA, 
-10L), class = "data.frame")


b <- structure(list(sd.3 = c("0_62000_1", "0_62004_5", "0_62070_19", 
"0_62070_23", "0_62070_27", "0_62070_33", "0_62071_1", "0_62071_15"
), sd.4 = c("0_62000_1", "0_62004_5", "0_62070_19", "0_62070_23", 
"0_62070_27", "0_62070_33", "0_62071_1", "0_62071_15"), sd.5 = c("0_62000_1", 
"0_62004_5", "0_62070_19", "0_62070_23", "0_62070_27", "0_62070_33", 
"0_62071_1", "0_62071_15")), row.names = c(NA, 8L), class = "data.frame")

我想合并这两个,并保持所有列值基于by.x = "sd.3.IID", by.y = "sd.3"。我试过了CCD_ 2,但不保留CCD_ 3列。我需要做什么才能做好这件事?

我们可以transformmerge之前创建一个新列,并使用新列更改by.y

merge(x = a, y = transform(b, sd.3t = sd.3), by.x = "sd.3.IID",
by.y = "sd.3t", all = TRUE)

-输出

sd.3.IID       sd.3       sd.4       sd.5
1   0_62000_1  0_62000_1  0_62000_1  0_62000_1
2   0_62004_5  0_62004_5  0_62004_5  0_62004_5
3  0_62070_19 0_62070_19 0_62070_19 0_62070_19
4  0_62070_23 0_62070_23 0_62070_23 0_62070_23
5  0_62070_27 0_62070_27 0_62070_27 0_62070_27
6  0_62070_33 0_62070_33 0_62070_33 0_62070_33
7   ADNI_1092       <NA>       <NA>       <NA>
8   ADNI_1263       <NA>       <NA>       <NA>
9   ADNI_1283       <NA>       <NA>       <NA>
10  ADNI_1334       <NA>       <NA>       <NA>
11  0_62071_1  0_62071_1  0_62071_1  0_62071_1
12 0_62071_15 0_62071_15 0_62071_15 0_62071_15

最新更新