首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大数据与经纬度的模糊匹配

大数据与经纬度的模糊匹配
EN

Stack Overflow用户
提问于 2016-07-13 18:13:18
回答 1查看 470关注 0票数 1

我获得了与以下示例数据类似的75,000个坐标:

代码语言:javascript
复制
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数据进行模糊匹配(从这里开始 )。"US.zip")。

这给了我大约50万行数据。我想将我的坐标与GeoNames数据中的坐标进行匹配,据我所知,这意味着使用一个距离矩阵,为我的75,000个lat/lon对从"US“文件返回最接近的数据行。

我必须脱机执行此操作,因为有太多行无法在web服务上运行它。

理论上,我知道如何做到这一点:

代码语言:javascript
复制
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),])

唯一的问题是,运行这个程序需要大约一兆字节的内存或更多的内存。所以我得到了

无法分配大小为XXXX的向量

错误。

有什么可行的办法吗?我试过分块,但一次几百行也太过分了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-13 20:45:49

我不确定我是否正确地理解了你的问题,但看看这是否有帮助:

代码语言:javascript
复制
require(data.table)
US <- as.data.frame(fread("US.txt")) # data.table or data.frame, either way
US<-data.table(US[,c(2,6,5)]) ##just makes it easier for demonstration. 
colnames(US)<-c("city", "lat", "long")

setkey(US, lat, long)

fuzzyMatch<-function(data, fuzzSize = 10, n.results = 3){
  f<-fuzzSize
  cities<-list()
 for(i in 1:nrow(data)){
  myLat<-data[i,1]
  myLong<-data[i,2]

  temp<-US[ lat %between% c(myLat-f, myLat+f)][long %between% c(myLong-f, myLong+f)]
  cities[i]<-unique(temp[sample(nrow(temp), n.results, replace = T),1, with = F])
 }
  return(cities)
}

变量fuzzSize将是用于搜索的网格正方形的大小,而n.results是它返回的附近城市的多少。我添加它是因为它有时返回500,有时返回0。您可能需要微调/调整输出以满足您的需要,但希望这会有所帮助。

编辑:您还可以删除n.results,然后使用附近选定的城市使用以前尝试过的dist方法。较小的子集应该是更多的内存-可行的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38358975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档