两个data.table数据集之间的快速映射

时间:2017-01-23 21:00:06

标签: r data.table

我想让县名与数据集中的所有邮政编码相关联。我使用数据框获得了相对较快的结果(虽然我觉得它可以更快地完成)但是对于data.table来说却不是这样,即使有一些优化也是如此。有没有办法使用数据框或data.tables进一步加快速度?

这是我的初始化(基于this answer):

library(noncensus)
data(zip_codes)
data(counties)
counties$fips <- as.numeric(paste0(counties$state_fips, counties$county_fips))

计算数据帧(第二个稍快,如预期的那样) - 20,16秒:

system.time(sapply(zip_codes$fips, function(x) subset(counties, fips == x)$county_name))
system.time(sapply(zip_codes$fips, function(x) counties[counties$fips==x,]$county_name))

计算数据表 - 60,43秒:

zip_codes.dt <- data.table(zip_codes)
counties.dt <- data.table(zip_codes)
system.time(sapply(zip_codes.dt$fips, function(x) subset(counties.dt, fips == x)$county_name))
setkey(counties.dt, fips)  # optimizing
system.time(sapply(zip_codes.dt$fips, function(x) counties.dt[.(x)]$county_name))

1 个答案:

答案 0 :(得分:2)

根据@Frank的建议,阅读小插曲here和软件包文档帮助我找到了使用data.table的答案。

这是:

zip_codes.dt[counties.dt, on="fips", county_name := county_name]