12 votos

Cómo conseguir el segundo vecino más cercano entre dos patrones de puntos en R?

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.

9voto

Jay Bazuzi Puntos 194

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.

6voto

shsteimer Puntos 8749

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.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X