如何根据R中另一个数据帧中列的值过滤数据帧?

时间:2015-09-01 13:01:23

标签: r

例如,我有一个数据框 -

ad

key   value
ab      1
bc      2
cd      3

ad1

key  QS IS LISR Group version
ab    7 23  77    2    1.2
bc    7 30  70    1    1.5
cd    8 40  60    2    1.4
de    6 12  88    3    1.7
ef    3 23  77    4    1.2
fg    2 34  66    2    1.4

结果应为 -

result

key  QS IS LISR Group version
ab    7 23  77    2    1.2
bc    7 30  70    1    1.5
cd    8 40  60    2    1.4

我找到了一些示例,但这些示例适用于小型数据帧,我的两个数据帧都很大!

尝试编写查询但没有成功?你怎么解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:3)

我们可以使用%in%subset根据两个数据集中的“关键”列对“ad1”中的行进行子集化。

subset(ad1, key %in% ad$key)
#   key QS IS LISR Group version
#1  ab  7 23   77     2     1.2
#2  bc  7 30   70     1     1.5
#3  cd  8 40   60     2     1.4

或其他选项join来自data.table。在devel版本中,我们可以使用on。我们将'data.frame'转换为'data.table'(setDT(ad1))并加入'ad'数据集。

library(data.table)#v1.9.5+
setDT(ad1)[ad['key'], on='key']
#  key QS IS LISR Group version
#1:  ab  7 23   77     2     1.2
#2:  bc  7 30   70     1     1.5
#3:  cd  8 40   60     2     1.4

答案 1 :(得分:1)

这也有效:

ad1[which(ad1$key %in% ad$key),]