我想让县名与数据集中的所有邮政编码相关联。我使用数据框获得了相对较快的结果(虽然我觉得它可以更快地完成)但是对于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))
答案 0 :(得分:2)
根据@Frank的建议,阅读小插曲here和软件包文档帮助我找到了使用data.table的答案。
这是:
zip_codes.dt[counties.dt, on="fips", county_name := county_name]