【问题标题】:Merging two incomplete datasets in R with the same and different column names合并R中具有相同和不同列名的两个不完整数据集
【发布时间】:2015-02-27 18:06:03
【问题描述】:

我认为说明这一点的最佳方式是通过示例。

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

【问题讨论】:

  • 试试plyr::rbind.fill(df1, df2)
  • 感谢您的回复。它没有按预期工作,请参阅我为显示该代码行的结果所做的编辑。
  • 啊,现在我明白了……太快了。

标签: r merge dataset


【解决方案1】:

这是一种适用于您的示例的快速而肮脏的方法:

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

【讨论】:

    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    相关资源
    最近更新 更多