将两个变量与另一个数据帧中的一组变量合并/匹配

时间:2014-04-01 14:46:22

标签: r merge dataframe match plyr

我有两个data.frames df.1df.2,我会合并或以其他方式选择数据来创建新的data.frame。 df.1包含有关每个人(ID),抽样事件(Event),Site和样本编号(Sample)的信息。对我而言,棘手的部分是Site和每个Sample - ID配对的相应Event不同。例如,F3-3有Site" plum" Sample" 1"和M6-3有Site"梨" Sample" 1"。

data.frame df.1

df.2的{​​{1}}和Sample1Sample2 Sample中的df.1信息相对应ID - Event配对。

data.frame df.2

我希望匹配/合并这两个data.frames之间的信息。基本上,得到"字"来自Site的{​​{1}}中与df.1号匹配的Sample。下面是一个示例(df.3)。

data.frame df.3

每个ID - Event配对只有一个Site和相应的Sample(例如" Apple"将对应" 1& #34;不是" 1"和" 4")。我知道如果我只是匹配,我可以使用merge,例如,Sample1Sample2我不知道如何填充Site1和{{} 1}}使用正确匹配的单词。

Site2

1 个答案:

答案 0 :(得分:1)

两个merge应该这样做:

first <- merge(df.2, unique(df.1[,3:5]), by.x=c("Sample1","Event"), by.y=c("Sample","Event"), all.x=TRUE)
second <- merge(first, unique(df.1[,3:5]),by.x=c("Sample2","Event"), by.y=c("Sample","Event"), all.x=TRUE)

print(second)
   Sample2 Event Sample1    V1    V2 ID Sex Site.x Site.y
1       10     1       1 0.000 0.001 F1   F  Apple   Kiwi
2        2     1       1 0.120 0.107 F1   F  Apple  Grape
3        3     1       1 0.497 0.273 F1   F  Apple   Pear
4        3     3       2 0.001 0.107 M6   M Banana  Mango
5        4     1       1 0.715 0.595 F1   F  Apple Orange
6        4     3       2 0.000 0.273 M6   M Banana  Guava
7        5     1       1 0.000 0.000 F1   F  Apple  Peach
8        5     3       2 0.829 0.595 M6   M Banana   Kiwi
9        6     1       1 0.001 0.004 F1   F  Apple   Plum
10       7     1       1 0.000 0.000 F1   F  Apple Banana
11       8     1       1 0.829 0.547 F1   F  Apple  Mango
12       9     1       1 0.000 0.001 F1   F  Apple  Guava