У меня есть два набора данных (формат csv) разной длины, оба содержат адреса, а также координаты (лог и широта). Оба имеют эту форму (пример набора данных 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)
Спасибо.
data.frame
, если вы использовали одну из функцийread
. Если вы использовалиfread
, это может бытьdata.table
. - person Pierre L   schedule 27.10.2016