R dagi ikkita ma'lumotlar to'plami orasidagi barcha nuqtalar uchun eng yaqin qo'shni (log, lat), so'ngra keyingi eng yaqin qo'shnini topish va hokazo.

Menda turli uzunlikdagi ikkita ma'lumotlar to'plami (csv formati) bor, ularning ikkalasida ham manzillar, ham koordinatalar (log va lat) mavjud. Ikkalasi ham shunday shaklga ega (misol A ma'lumotlar to'plami):

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

Yuqorida aytib o'tilganidek, mening boshqa ma'lumotlar to'plamim (B) yuqoridagiga o'xshaydi (A). Men A ma'lumotlar to'plamidagi har bir nuqta uchun eng yaqin manzilni topish yo'lini topishga harakat qilaman.

A ma'lumotlar to'plami juda kichik (22 ta manzil), ammo B ma'lumotlar to'plami juda katta (8500 manzil).

Men R uchun yangiman va ba'zi maslahatlar juda qadrlanadi.

rahmat.

Tahrirlash:

Men kodni shunday ishladim (pastda), ammo, nafaqat eng yaqin, balki ikkinchi eng yaqin va hokazo qo'shnini ham qidirishning yo'li bormi?

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)

Rahmat.


person Nadja    schedule 27.10.2016    source manba
comment
Men dataframe emas, balki CSV dan foydalansam, bu ishlaydimi?   -  person Nadja    schedule 27.10.2016
comment
Agar siz read funksiyalardan birini ishlatgan bo'lsangiz, ma'lumotlaringiz avtomatik ravishda data.frame da saqlanadi. Agar siz fread dan foydalansangiz, u data.table bo'lishi mumkin.   -  person Pierre L    schedule 27.10.2016