合并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。感谢您的回复。它没有像预期的那样工作,请看我为显示那行代码的结果所做的编辑。啊,现在我明白了。。。太快了。