我有两个数据帧。在第一个中,我有一个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")
他们都没有完成任务。
任何暗示都会被暗示。谢谢!
答案 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中的所有列。