合并R中具有相同和不同列名的两个不完整数据集
我认为最好的方式来说明这一点是通过例子合并R中具有相同和不同列名的两个不完整数据集,r,merge,dataset,R,Merge,Dataset,我认为最好的方式来说明这一点是通过例子 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 W
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
下面是一种适用于您的示例的快速而肮脏的方法:
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
请尝试plyr::rbind.filldf1、df2。感谢您的回复。它没有像预期的那样工作,请看我为显示那行代码的结果所做的编辑。啊,现在我明白了。。。太快了。