我有两个不同长度的数据集(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)
谢谢。