Es allí una manera de conseguir las distancias para el segundo vecino más cercano entre dos patrones de puntos en R? El spatstat paquete tiene una función llamada nncross pero sólo se aplica a los vecinos más cercanos entre dos patrones y necesito las distancias a la segunda vecinos más cercanos.
Respuestas
¿Demasiados anuncios?La función get.knnx en el paquete FNN puede calcular el N-vecinos más próximos de patrones de puntos.
x1 = cbind(runif(10),runif(10))
x2 = cbind(runif(10),runif(10))
nn = get.knnx(x1,x2,2)
ahora nn$nn.index is a matrix such that nn$nn.índice[i,j] es la fila en la x1 de los dos vecinos más próximos a la fila i en x2 - organizadas de tal manera que el más cercano está a [i,1], y la próxima vecino es [i,2].
La función también devuelve las distancias para usted, y tiene algunas opciones para calcular los índices espaciales para búsquedas muy rápidas.
Acabo de descubrir que spatstat tiene un crossdist función.
Descripción
Calcula las distancias entre pares de las 'cosas', tomado de dos diferentes conjuntos de datos.
Lleva dos patrones de puntos X e y como las entradas, y devuelve la matriz cuyo [i,j] de la entrada es la distancia desde X[i] Y a[j]. Para obtener el segundo más cercano a los vecinos el uso de 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)
}
Sé que ya he aceptado Spacedman la respuesta, pero me gustaría compartir cómo lo hice de otra manera.