Risposte:
La funzione get.knnx nel pacchetto FNN può calcolare i vicini N-più vicini in schemi di punti.
x1 = cbind(runif(10),runif(10))
x2 = cbind(runif(10),runif(10))
nn = get.knnx(x1,x2,2)
ora nn $ nn.index è una matrice tale che nn $ nn.index [i, j] è la riga in x1 dei due vicini più vicini alla riga i in x2 - ordinata in modo che il più vicino sia [i, 1] e il prossimo vicino è [i, 2].
La funzione restituisce anche le distanze per te e ha alcune opzioni per calcolare gli indici spaziali per ricerche molto veloci.
Ho appena scoperto che spatstat ha una funzione crossdist .
Descrizione
Calcola le distanze tra coppie di "cose" prese da due diversi set di dati.
Prende due modelli di punti X e Y come input e restituisce la matrice la cui voce [i, j] è la distanza da X [i] a Y [j]. Per ottenere il secondo vicino più vicino usando crossdist:
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)
}
So di aver già accettato la risposta di Spacedman ma vorrei condividere il modo in cui l'ho fatto in un altro modo.
La funzione nndist
nel spatstat
pacchetto ha un argomento k
che determina l'ordine dei vicini. Per ottenere la seconda distanza vicina più vicina, usare k=2
. Per ottenere sia il primo che il secondo vicino, usa k=1:2
.