2 つの座標セットがあり、最も近い座標の一致を見つけようとしています。1 つのデータセットが 100 万件のレコードで構成され、もう 1 つのデータセットが 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")
2番目のデータセットのdputは
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 のすべての座標と一致させて、最も近い一致を見つけることです。現在、私は 2 つの 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 から 1 つのポイントを取得し、dataset2 のすべてのポイントを使用して距離を計算し、最小距離を見つけて、その距離の座標を返します。
このタスクを適切な時間で達成するための並列処理を探しています。どんな提案でも大歓迎です。
よろしく、