查找最近邻居(log,lat),然后查找下一个最近邻居,依此类推R

时间:2016-10-27 11:47:58

标签: r maps distance spatial

我有两个不同长度的数据集(csv格式),它们都包含地址和坐标(log和lat)。两者都有这种形状(例如数据集A):

ID  Address lat long
1   Lausitzer Strasse, 20/22, 2991, Lauta, Germany  51.46228    14.09522
2   Parkstrasse, 6, 2991, Lauta, Germany    51.4631141  14.1109184
3   Parkstrasse, 6, 2991, Lauta , Germany   51.4631141  14.1109184
4   Arndtstrasse, 27, 2991, Lauta, Germany  51.44664    14.10287
5   Goethestrasse, 13, 4746, Hartha, Germany    51.0965679  12.9725834
6   Bahnhofstrasse, 3, 3a, 3b, 4886, Beilrode, Germany  51.57183    13.06729
7   Haefenmarkt, 11, 98673, Eisfeld, Germany    50.42697    10.90871

如上所述,我的其他数据集(B)看起来像上面的那个(A)。我正试图找到一种方法来找到数据集A中每个点的最近地址。

数据集A相当小(22个地址),但数据集B非常大(8500个地址)。

我是R的新手,非常感谢一些建议。

感谢。

编辑:

我使代码工作如下(下图),但是,有没有办法不仅搜索最近的,而且还搜索第二个最近的邻居?

list1 <-read.csv("geocoded.csv",sep=",",header=TRUE) 
list2 <- read.csv("geocoded2.csv", sep=",", header=TRUE)

library(geosphere)
library(data.table)
library(dplyr)

mat <- distm(list1[,c('long','lat')], list2[,c('long','lat')],     
fun=distVincentyEllipsoid)

# assign the name to the point in list1 based on shortest distance in the 
matrix
list1$locality <- list2$locality[apply(mat, 1, which.min)]

#list2a <- list2 %>% group_by(locality) %>% summarise_each(funs(mean)) %>%     
ungroup()
#mat2 <- distm(list1[,c('long','lat')], list2a[,c('long','lat')], 
fun=distVincentyEllipsoid)
#list1$locality2 <- list2a$locality[apply(mat2, 1, which.min)]

list1

#Plot distance

#list1$near_dist <- apply(mat2, 1, min)

list1$near_dist <- apply(mat, 1, min)

list1
write.table(list1, "C:/v", sep=",", row.names=FALSE)

谢谢。

0 个答案:

没有答案