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

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

Другие вопросы по тегам