在R中,如何通过第二个datafrmame中的标识符在一个数据帧中选择条目行

时间:2012-12-06 21:02:27

标签: r

  

可能重复:
  In R, how do I subset a data.frame by values from another data.frame?

我有两个data.frames。第一个(df1)是一个包含标题的100个条目的列 - “名称”。第二个(df2)是一个包含数百个元数据列的数据帧,用于数万个条目。 df2的第一列也有标题“names”。

我只想通过df1中找到的名称子集选择df2中的所有元数据。

请帮助这个新手R用户。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用%in%in的data.frame,但如果要查找数千个名称,它可能会很慢。

我建议使用data.table,因为它对索引列进行排序,即使有数百万条记录,也可以进行几乎即时的数据库连接。有关更多信息,请阅读data.table文档。

假设你有一个很大的data.frame和很少的data.frame:

library(data.table)
big <- data.frame(names=1:5, data=1:5)
small <- data.frame(names=c(1, 3, 6))

将它们转换为data.table对象,并将键列设置为名称。

big <- data.table(big, key='names')
small <- data.table(small, key='names')

现在执行加入。 data.table中的[]允许data.table被另一个data.table的键列索引。在这种情况下,我们返回大的行,这些行也是小的,如果有小的名称但不是大的,则会丢失数据。

big[small]
#    names data
# 1:     1    1
# 2:     3    3
# 3:     6   NA