数据帧的子集,包括指定列的另一个数据帧的元素

时间:2015-02-18 16:05:07

标签: r

我有两个数据框(df1和df2)

让df1成为这样一个数据框:

col1 col2 col3
a     3    12
a     5    15
b     2    3
a     5    6
a     4    12
b     5    15
a     3    14
c     5    8
c     3    2
c     2    22
b     2    21
a     5    11
b     5    7
c     5    6
a     2    5

即 `

df1<-data.frame(col1=c("a","a","b","a","a","b","a","c","c","c","b","a","b","c","a") 
                ,col2=c(3,5,2,5,4,5,3,5,3,2,2,5,5,5,2)
                ,col3=c(12,15,3,6,12,15,14,8,2,22,21,11,7,6,5))

让df2就是这样一个数据框:

col1  col2 
b     3
c     4

所需的输出是:

   col1 col2 col3
a     3    12
b     2    3
a     4    12
b     5    15
a     3    14
c     5    8
c     3    2
c     2    22
b     2    21
b     5    7
c     5    6

这是df1的子集。它包括df1的所有行,其与df2的col1或df2的col2相同。

例如,col1.df2的一个元素是&#34; b&#34;。所有行包括&#34; b&#34;在col1的df1将是所需输出的元素。

df2的第二列包括&#34; 3&#34;。因此所有行包括&#34; 3&#34;在col2的df1将是所需输出的元素。

同样适用于&#34; c&#34;和&#34; 4&#34;。

我怎么能用R做到这一点?我会很高兴得到任何帮助。谢谢。

2 个答案:

答案 0 :(得分:4)

试试吧:

df1[df1$col1 %in% df2$col1 | df1$col2 %in% df2$col2,]

答案 1 :(得分:2)

如果有很多列

,您还可以将ReduceMap一起使用
 df1[Reduce(`|`, Map(`%in%`, df1[1:2], df2[1:2])),]