可能重复:
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用户。谢谢!
答案 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