我有两个要基于变量“ID”合并的数据帧Data1和Data2。
该示例数据可在此处下载: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是正确的?
感谢任何能提供帮助的人!!
最佳答案
尝试这个:
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
编辑:提高了代码的清晰度