我有两个数据帧。
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列。我需要做什么才能做好这件事?
我们可以transform
在merge
之前创建一个新列,并使用新列更改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