回答:
パッケージFNNの関数get.knnxは、ポイントパターンでN最近傍を計算できます。
x1 = cbind(runif(10),runif(10))
x2 = cbind(runif(10),runif(10))
nn = get.knnx(x1,x2,2)
現在、nn $ nn.indexは、nn $ nn.index [i、j]がx2の行iの2つの最近傍のx1の行であるような行列です-最も近い値が[i、1]になるようにソート次の隣人は[i、2]です。
この関数は距離も返します。また、非常に高速な検索のために空間インデックスを計算するオプションもあります。
私はちょうどことを発見しspatstatがありcrossdist機能を。
説明
2つの異なるデータセットから取得した「モノ」のペア間の距離を計算します。
入力として2つの点パターンXとYを取り、[i、j]エントリがX [i]からY [j]までの距離である行列を返します。crossdistを使用して2番目に近い近傍を取得するには:
xdistances <- crossdist(X, Y) #Get all cross distances
nn = numeric()
for (i in 1:nrow(X)) {
xdistance <- sort(xdistances[i,], partial=2)[2]
nn <- append(nn, xdistance)
}
Spacedmanの回答をすでに受け入れましたが、別の方法でそれをどのように行ったかを共有したいと思います。
パッケージnndist
内の関数には、近隣の順序を決定spatstat
する引数がありますk
。2番目の最近傍距離を取得するには、を使用しますk=2
。最初の隣人と2番目の隣人の両方を取得するには、を使用しますk=1:2
。