合并R中具有公共和非公共样本的两个数据帧

合并R中具有公共和非公共样本的两个数据帧,r,merge,unique,R,Merge,Unique,我有两个数据帧,Data1和Data2,我想基于变量“ID”合并它们 此示例数据可在此处下载: 这是第一个数据帧: > 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

我有两个数据帧,Data1和Data2,我想基于变量“ID”合并它们

此示例数据可在此处下载:

这是第一个数据帧:

> 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
这是第二个数据帧:

> 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、Data2、by=“ID”、sort=FALSE、all.x=TRUE、all.y=TRUE)
ID水果.x颜色.x重量.x水果.y颜色.y重量.y
1苹果红5苹果红5
2 2橙橙7橙橙7
3香蕉黄3香蕉黄3
4梨绿5梨绿5
5番茄红4番茄红4
6 9油桃橙5 NA
7 6浆果蓝4 NA
8 7橘子4 NA
9 8菠萝黄9 NA
10 10甜菜红5 NA
11 14 NA甜瓜粉5
12 11 NA石榴红6
13 12 NA葡萄绿4
14 13 NA蔓越莓红4
15 NA南瓜橙10
如您所见,两个数据帧都有许多相同的变量。但是,Data1中的某些ID不在Data2中,反之亦然。此外,一些ID位于两个数据帧中

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

问题2:如果Data1和Data2中碰巧存在一个样本,其中一个值不一致怎么办。对于示例ID 1,如果Fruit.x是Apple,但是Fruit.y被错误地编码为Aple(拼写错误),有没有办法快速检查所有这些实例,以便选择正确的实例?或者,当发生这种情况时,我能告诉R总是考虑DATA1与DATA2是正确的吗?< /P>
谢谢所有能帮忙的人

这应该可以让您大致了解这一点:它将堆叠两个数据帧并删除重复的行

unique(rbind(Data1, Data2))

对不起,我没有处理拼写错误的好方法。

要回答问题1:

merge(data1, data2, all=T)
应该给你你想要的。但它不会处理拼写错误。你必须单独处理它们
unique
是一个很好的工具,可以按原样找到它们,从而降低资本化问题的标准化程度。

尝试以下方法:

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")
}

编辑:提高了代码的清晰度

感谢大家的回答+向所有人致意!