获取与其他数据帧的行匹配的数据帧中的所有行

时间:2016-01-13 05:59:02

标签: r dataframe

如果我有2个数据框,请说

df1 = data.frame(A = c(10,20,30,20,10),B = c("a","b","c","b","a"))
df2 = data.frame(A = c(10,30),B = c("a","c"))

现在我希望df1中的所有行都与df2的行匹配。在这里,答案应该是:

>dfout
  A  B
1 10 a
2 30 c
3 10 a

如果我使用:

sqldf("select * from df1 intersect select * from df2")

我明白了:

>output
  A  B
1 10 a
2 30 c

但我想要所有匹配的行,包括重复行。

注意:我请求的解决方案应该是通用解决方案,不要在任何地方使用列名。

3 个答案:

答案 0 :(得分:5)

merge似乎是这份工作的人:

merge(df1, df2)

##    A B
## 1 10 a
## 2 10 a
## 3 30 c

或者,来自inner_join的{​​{1}}:

dplyr

答案 1 :(得分:3)

这可以使用sqldf的默认后端(sqlite)使用自然连接来完成:

sqldf("SELECT * FROM df1 NATURAL JOIN df2")

自然连接将根据具有相同名称的所有列之间的相等条件在两个表(数据框)之间执行内部连接。

注意:也可以将 INTERSECT ALL 与RPostgreSQL后端一起用于sqldf。

答案 2 :(得分:3)

我们可以使用data.table

library(data.table)
setDT(df1)[df2, on=names(df1)]
#    A B
#1: 10 a
#2: 10 a
#3: 30 c