【问题标题】:Merging two data frames in R that have common and uncommon samples合并 R 中具有常见和不常见样本的两个数据帧
【发布时间】:2012-02-15 16:31:01
【问题描述】:

我有两个数据框,Data1 和 Data2,我想根据变量“ID”合并它们。

此示例数据可在此处下载:http://dl.dropbox.com/u/52600559/example.RData

这是第一个数据框:

> Data1
   ID     Fruit  Color Weight
1   1     Apple    Red      5
2   2    Orange Orange      7
3   3    Banana Yellow      3
4   4      Pear  Green      5
5   5    Tomato    Red      4
6   6     Berry   Blue      4
7   7  Mandarin Orange      4
8   8 Pineapple Yellow      9
9   9 Nectarine Orange      5
10 10      Beet    Red      5

这是第二个数据框:

> Data2
   ID       Fruit  Color Weight
1   1       Apple    Red      5
2   2      Orange Orange      7
3   3      Banana Yellow      3
4   4        Pear  Green      5
5   5      Tomato    Red      4
6  11 Pomegranate    Red      6
7  12       Grape  Green      4
8  13   Cranberry    Red      4
9  14       Melon   Pink      5
10 15     Pumpkin Orange     10

我尝试像这样合并它们:

> merge(Data1, Data2, by = "ID", sort = FALSE, all.x = TRUE, all.y = TRUE)
   ID   Fruit.x Color.x Weight.x     Fruit.y Color.y Weight.y
1   1     Apple     Red        5       Apple     Red        5
2   2    Orange  Orange        7      Orange  Orange        7
3   3    Banana  Yellow        3      Banana  Yellow        3
4   4      Pear   Green        5        Pear   Green        5
5   5    Tomato     Red        4      Tomato     Red        4
6   9 Nectarine  Orange        5        <NA>    <NA>       NA
7   6     Berry    Blue        4        <NA>    <NA>       NA
8   7  Mandarin  Orange        4        <NA>    <NA>       NA
9   8 Pineapple  Yellow        9        <NA>    <NA>       NA
10 10      Beet     Red        5        <NA>    <NA>       NA
11 14      <NA>    <NA>       NA       Melon    Pink        5
12 11      <NA>    <NA>       NA Pomegranate     Red        6
13 12      <NA>    <NA>       NA       Grape   Green        4
14 13      <NA>    <NA>       NA   Cranberry     Red        4
15 15      <NA>    <NA>       NA     Pumpkin  Orange       10

如您所见,两个数据框都有许多相同的变量。但是,Data1 中的某些 ID 不在 Data2 中,反之亦然。此外,一些 ID 位于两个数据帧中。

问题 1:我也想合并上面显示的所有列。所以,我希望“Fruit.x”与“Fruit.y”合并。放入一个名为“水果”的列中。我该怎么做?

问题 2:如果其中一个样本恰好同时出现在 Data1 和 Data2 中,但其中一个值不一致,该怎么办?所以对于示例 ID 1,如果 Fruit.x 是 Apple,但 Fruit.y 被错误地编码为 Aple(拼写错误),有没有办法可以快速检查所有这些实例,以便我可以选择哪个是正确的?或者我可以告诉 R 在发生这种情况时始终认为 Data1 与 Data2 是正确的吗?

感谢任何可以提供帮助的人!

【问题讨论】:

  • 感谢大家的回答!向所有人 +1!

标签: r merge unique


【解决方案1】:

试试这个:

merge(Data1, Data2, all = TRUE)

对于拼写试试这个,其中amatch 是与fruit 的近似匹配,near 包含不完全匹配的近似匹配:

for(fruit in Data1$Fruit) {
    amatch <- agrep(fruit, Data2$Fruit, value = TRUE)
    near <- amatch[amatch != fruit]
    if (length(near) > 0) cat(fruit, ":", near, "\n")
}

使用提供的数据:

Berry : Cranberry 

编辑:提高代码的清晰度

【讨论】:

    【解决方案2】:

    回答问题1:

    merge(data1, data2, all=T)
    

    应该给你你正在寻找的东西。但它不会处理拼写错误。您将不得不单独处理它们。 uniquetolower 一样是查找它们的好工具,可以规范大小写问题。

    【讨论】:

      【解决方案3】:

      这应该可以帮助您完成大部分工作:它将堆叠两个数据框并删除重复的行。

      unique(rbind(Data1, Data2))
      

      抱歉,我没有处理拼写错误的好技巧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-03
        • 1970-01-01
        相关资源
        最近更新 更多