我认为说明这一点的最好方法是通过示例。
I have my primary dataset:
ID ColA ColB ColC ColE
2 Leaf Dirt 1
4 Plant Rock 2
1 Tree Mountain 3
9 Grass Boulder 4
5 Weed Dust 5
12 Sky A
11 Cloud B
6 Blue C
7 Atmosphere D
8 White E
然后第二个数据集我想将我的主要与
结合起来ID ColA ColB ColD
6 2x2 11x1 11
7 3x3 16x6 12
8 6x6 17x7 13
11 8x8 18x8 14
12 0x0 19x9 15
最终结果应为
ID ColA ColB ColC ColE ColD
2 Leaf Dirt NA 1 NA
4 Plant Rock NA 2 NA
1 Tree Mountain NA 3 NA
9 Grass Boulder NA 4 NA
5 Weed Dust NA 5 NA
12 0x0 19x9 Sky A 15
11 8x8 18x8 Cloud B 14
6 2x2 11x1 Blue C 13
7 3x3 16x6 Atmosphere D 12
8 6x6 17x7 White E 11
我并不关心ID的排序方式,但我希望保持主数据集的列名顺序相同。第二个数据集中与主数据库列名不同的所有列都位于主数据集的最右侧,如ColD示例所示。
每当我尝试编写合并函数时,我最终会得到各种重复,双精度或不实际合并的列。
如您所见,这两个数据集在某些领域都不完整,合并这两个数据的好方法是什么?
谢谢。
编辑:LukeA你的解决方案给了我这个:ID ColA ColB ColC ColE ColD
2 Leaf Dirt 1 NA
4 Plant Rock 2 NA
1 Tree Mountain 3 NA
9 Grass Boulder 4 NA
5 Weed Dust 5 NA
12 Sky A NA
11 Cloud B NA
6 Blue C NA
7 Atmosphere D NA
8 White E NA
6 2x2 11x1 NA NA 11
7 3x3 16x6 NA NA 12
8 6x6 17x7 NA NA 13
11 8x8 18x8 NA NA 14
12 0x0 19x9 NA NA 15
答案 0 :(得分:0)
这是一个快速&对你的例子有用的脏方法:
df3 <- merge(df1, df2, "ID", all = T)
df3[df3 == ""] <- NA
df3 <- df3[match(df1$ID, df3$ID), ]
df3[!complete.cases(df3[c("ColA.x", "ColB.x")]), c("ColA.x", "ColB.x")] <- df3[!complete.cases(df3[c("ColA.x", "ColB.x")]), c("ColA.y", "ColB.y")]
df3 <- df3[, !names(df3) %in% c("ColA.y", "ColB.y")]
names(df3)[2:3] <- c("ColA", "ColB")
df3
# ID ColA ColB ColC ColE ColD
# 2 2 Leaf Dirt <NA> 1 NA
# 3 4 Plant Rock <NA> 2 NA
# 1 1 Tree Mountain <NA> 3 NA
# 8 9 Grass Boulder <NA> 4 NA
# 4 5 Weed Dust <NA> 5 NA
# 10 12 0x0 19x9 Sky A 15
# 9 11 8x8 18x8 Cloud B 14
# 5 6 2x2 11x1 Blue C 11
# 6 7 3x3 16x6 Atmosphere D 12
# 7 8 6x6 17x7 White E 13