Поиск ближайшего соседа (логарифм, широта), затем следующего ближайшего соседа и т. д. для всех точек между двумя наборами данных в R

У меня есть два набора данных (формат 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)

Спасибо.


person Nadja    schedule 27.10.2016    source источник
comment
Будет ли это работать, учитывая, что я использую CSV, а не фрейм данных?   -  person Nadja    schedule 27.10.2016
comment
Ваши данные автоматически сохраняются в data.frame, если вы использовали одну из функций read. Если вы использовали fread, это может быть data.table.   -  person Pierre L    schedule 27.10.2016