【发布时间】:2016-07-13 18:13:18
【问题描述】:
我有 75,000 个坐标,类似于以下示例数据:
addresses <- structure(list(address_lat = c(-175.33, -175.20, -177.65, -174.10, -175.80,
-179.50, -179.23, -179.12, -178.75, -174.77), address_lon = c(70.25,
69.75, 62.23, 60.50, 66.25, 61.75, 62.54, 63.70, 61.45, -15.80)), .Names = c("address_lat", "address_lon"), class = "data.frame", row.names = c(NA, -10L))
我需要对 GeoNames 数据进行模糊匹配(from here,例如“US.zip”)。
这给了我大约 500,000 行数据。我想将我的坐标与 GeoNames 数据中的坐标进行匹配,据我所知,这意味着使用距离矩阵,为我的 75,000 个纬度/经度对中的每一对返回“美国”文件中最接近的数据行。
我必须离线执行此操作,因为有太多行无法针对 Web 服务运行它。
理论上,我知道该怎么做:
unzip("US.zip")
require(data.table)
US <- as.data.frame(fread("US.txt")) # data.table or data.frame, either way
library(geosphere)
D = distm(US[, c(6,5)], addresses)
geo <- cbind(addresses, US[apply(D, 1, which.min),])
唯一的问题是运行它需要 1 TB 或更多的 RAM。所以我得到了
无法分配大小为 XXXX 的向量
错误。
有没有实用的方法来做到这一点?我尝试将其分块,但即使一次几百行也太多了。
【问题讨论】:
-
@Arun 我只是将纬度和经度与 GeoNames 地理数据进行匹配。我也没有地理数据方面的专业知识。我只是从这个流行的数据源获取地理位置/位置数据。 geonames.org 所以基本上给定一个纬度/经度,我主要只是想知道这个城市,这样我的统计模型就有更好的特征。
-
好的,谢谢。我会尝试从 Bryan 那里了解解决方案。
标签: r