按键列合并两个data.frames

时间:2014-05-09 09:13:51

标签: r dataframe subset

我有两个数据帧。在第一个中,我有一个KEY / ID列和两个变量:

KEY V1 V2
1   10  2
2   20  4
3   30  6   
4   40  8
5   50 10

在第二个数据框中,我有一个KEY / ID列和第三个变量

KEY V3 
1    5  
2   10  
3   20  

我想根据KEY列提取第一个数据帧的行,这些行也在第二个数据帧中。我还想将V3列添加到最终数据集中。

KEY V1 V2 V3 
1   10  2  5
2   20  4 10 
3   30  6 20   

这是我尝试使用子集和合并函数

subset(data1, data1$KEY == data2$KEY) 
merge(data1, data2, by.x = "KEY", by.y = "KEY")

他们都没有完成任务。

任何暗示都会被暗示。谢谢!

3 个答案:

答案 0 :(得分:13)

merge(data1, data2, by="KEY")应该这样做!

答案 1 :(得分:1)

如果您想要的是内部联接,那么您的尝试应该这样做。如果它不使用class(data1$key)检查表中两个键列的格式。

除了这些以及Christian提出的合并之外,您还可以使用 -

library(plyr)
join(data1, data2, by="KEY", type="inner")

library(data.table)
setkey(data1, KEY)
setkey(data2, KEY)
data1[,list(data1,data2)]

答案 2 :(得分:0)

您可以使用dplyr *_join。给定样本数据,以下两个结果都会给出相同的结果:

library(dplyr)
df_merged <- inner_join(data1, data2, by = 'KEY')
df_merged <- right_join(data1, data2, by = 'KEY')

inner_join返回df1中df2中匹配值的所有行,以及df1和df2中的所有列。

right_join返回df2中的所有行,以及df1和df2中的所有列。