2017-01-23 73 views
0

我想要獲取與數據集中所有郵政編碼關聯的縣名。我用數據框獲得了相對較快的結果(儘管我覺得它可以做得更快),但是對於data.table,即使進行了一些優化,結果也不是這樣。有沒有辦法使用數據框架或data.tables進一步加速?兩個data.table數據集之間的快速映射

這是我的初始化(基於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

你的第一三分線,'$ fips',有可能在一個單一的線路與'縣獲得縣施工$ FIPS < - 相互作用(縣$ state_fips,縣$ county_fips)'。 – lmo

+1

@lmo在因子變量的值中引入一個「。」,與'fips'的'zip_codes'中的命名不匹配。 – Naumz

+2

'interaction'有一個sep參數設置爲「。」。作爲默認值。使用sep =「」來擺脫它。 – lmo

回答

2

根據@弗蘭克的建議,閱讀小插曲here和包文檔幫助我使用data.table找到答案。

這:

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