У меня есть два набора данных, один с 488 286 строками и координатами долготы и широты, а второй с 245 077 строками и координатами долготы и широты. Второй также содержит дополнительные данные, касающиеся координат. Я хочу найти самые близкие точки во втором наборе данных ко всем точкам в первом. Я не могу поделиться необработанными данными, поэтому для простоты я сгенерирую здесь несколько случайных точек:
df1<-cbind(runif(488286,min=-180, max=-120), runif(488286, min=50, max=85))
df2<-cbind(runif(245077,min=-180, max=-120), runif(245077, min=50, max=85))
Я попытался просто использовать функцию distm, но данные были слишком большими, поэтому я попытался разбить их следующим образом:
library(geosphere)
closest<-apply(df1, 1, function(x){
mat<-distm(x, df2, fun=distVincentyEllipsoid)
return(which.min(mat))
})
Я думаю, что это работает, но это занимает так много времени, что я фактически не видел результатов (пытался только с подмножеством данных). Мне действительно нужен более быстрый способ сделать это, так как я оставил его работать на 2 дня, а он не закончился. Необязательно использовать distm, просто все, что быстрее и точнее.
Заранее спасибо!
library
строки для небазовых функций R. Любопытно, работает ли distHaversine быстрее, чем distVincentyEllipsoid? Как видите, последний работает с вложенными цикламиfor
иwhile
. - person Parfait   schedule 01.04.2019