我有两个data.frames。第一个 (df1) 是包含 100 个条目的单列,带有标题 - “名称”。第二个(df2)是一个数据框,其中包含数以万计条目的数百列元数据。df2 的第一列也有标题“名称”。
我只是想通过 df1 中找到的名称子集选择 df2 中的所有元数据。
请帮助这个新手 R 用户。谢谢!
我有两个data.frames。第一个 (df1) 是包含 100 个条目的单列,带有标题 - “名称”。第二个(df2)是一个数据框,其中包含数以万计条目的数百列元数据。df2 的第一列也有标题“名称”。
我只是想通过 df1 中找到的名称子集选择 df2 中的所有元数据。
请帮助这个新手 R 用户。谢谢!
您可以将 data.frame 与 %in% 一起使用,但如果您要查找数千个名称,它可能会很慢。
我建议使用 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 中,如果 small 中有名称但 big 中没有名称,则会丢失数据。
big[small]
# names data
# 1: 1 1
# 2: 3 3
# 3: 6 NA