我有两组坐标并试图找到最接近的坐标匹配。鉴于一个数据集包含 100 万条记录,另一个包含近 50 万条记录,正在寻找更好的方法来完成这项任务并需要建议。
第一个数据集的输入是
structure(list(longitude = c(-2.5168477762, -2.5972432832, -2.5936692407,
-2.5943475677, -2.5923214528, -2.5919014869, -2.5913454553, -2.5835739992,
-2.5673150195, -2.5683356381), latitude = c(51.4844052488, 51.45278562,
51.4978889752, 51.4979844501, 51.4983813479, 51.4982126232, 51.4964350456,
51.4123728037, 51.4266239227, 51.4265740193)), .Names = c("longitude",
"latitude"), row.names = c(NA, 10L), class = "data.frame")
第二个数据集的输入是
structure(list(longitude = c(-3.4385392589, -3.4690321528, -3.2723981534,
-3.3684012246, -3.329625956, -3.3093349806, 0.8718409198, 0.8718563602,
0.8643998472, 0.8644153057), latitude = c(51.1931124311, 51.206897181,
51.1271423704, 51.1618047221, 51.1805971356, 51.1663567178, 52.896084336,
52.896092955, 52.9496082626, 52.9496168824)), .Names = c("longitude",
"latitude"), row.names = 426608:426617, class = "data.frame")
我查看了 R 中的 approx 和 findInterval 函数,但并没有完全理解它们是如何工作的。我想要做的是从 dataset1 获取坐标并将它们与 dataset2 中的所有坐标匹配以找到最接近的匹配。目前我正在使用两个 forloops,但由于数据的大小,它需要很长时间。
我尝试过的代码如下:
cns <- function(x,y)
{
a = NULL
b = NULL
for(i=1:nrow(x))
{
for(j=1:nrow(y))
{
a[j] = distm(c(x$longitude[i],x$latitude[i]),
c(y$longitude[j],y$latitude[j]),
fun = distVincentyEllipsoid)
}
b[i] = which(a == min(a))
}
return(y[b,])
}
上述函数从 dataset1 中获取一个点并使用 dataset2 中的所有点计算距离,然后找到最小距离并返回该距离的坐标。
寻找可能是并行处理以在合适的时间完成此任务。欢迎任何建议。
问候,