如何从R中的地址、城市和州中获取美国县名?

dsekswqp  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(151)

我有一个大约10000行的数据集。我有地址、城市、州和邮政编码值。我没有纬度/经度坐标。我希望在不花费大量时间的情况下检索县名称。我尝试过库(tinygeocoder),但是它需要大约14秒的时间来处理100个值,并且在我输入整个数据集时会出现“超时”错误。它输出一个fip代码,我必须加入它才能得到实际的县名。

library(tidygeocoder)
library(dplyr)

df <-   tidygeocoder::louisville[,1:4]
county_fips <- data.frame (fips = c("111", "112"),
                           county = c("Jefferson", "Montgomery"))

geocoded <- df %>% geocode(street = street, city = city, state = state,
                           method = 'census', full_results = TRUE,
                           api_options = list(census_return_type = 'geographies'))

df$fips <- geocoded$county_fips
df_new <- merge(x=df, y=county_fips, by="fips", all.x = T)
aydmsdu9

aydmsdu91#

你可以使用一个公共数据集,将城市和/或邮政编码链接到县。我发现这些网站有这样的数据:

然后可以对链接列(可能是城市或邮政编码,但取决于数据集)执行左连接:

df = merge(x=df, y=public_dataset, by="City", all.x=T)

如果性能是个问题,可以在合并之前从公共数据集中只选择county和链接列。

public_dataset = public_dataset %>% select(County, City)
ozxc1zmp

ozxc1zmp2#

缓慢的性能是由于tinygeocoder使用人口普查局的API来匹配数据,要求API匹配成千上万的地址是缓慢的,我不知道有什么不同的方法来做到这一点。
然而,我们至少可以帕雷你放入API的地址数量,如果我们把这个数量降到足够低,代码就可以运行了。
邮政编码表格区域(ZCTA)显示邮政编码与县名称(以及FIPS)之间的关系。“|“载有数据说明的分隔文件可在统计局网站上查阅。
计算邮政编码显示的次数可以告诉我们邮政编码是否跨越多个县。如果频率== 1,则可以将邮政编码自由转换为县。

ZCTA <- read.delim("tab20_zcta520_county20_natl.txt", sep="|")
n_occur <- data.frame(table(ZCTA$GEOID_ZCTA5_20))
head(n_occur, 10)

| | 变量1|频率|
| - ------|- ------|- ------|
| 1个|六零一|第二章|
| 第二章|六零二|第二章|
| 三个|六零三|第二章|
| 四个|六零六|三个|
| 五个|六百一十|四个|
| 六个|六一一|1个|
| 七|六一二|三个|
| 八个|六百一十六|1个|
| 九|六百一十七|第二章|
| 十个|六二二|1个|
在这些结果中,邮政编码为00611和00622的地址可以Map到相应的县,而无需通过API发送地址。如果您的地址非常城市化,那么您可能很幸运,因为邮政编码的区域很小,通常不会跨越多个县。

相关问题