R에서 두 점 패턴 사이에서 가장 가까운 두 번째 이웃을 얻는 방법은 무엇입니까? 사이에서 가장 가까운 두

R의 두 점 패턴 사이에서 가장 가까운 두 번째 이웃의 거리를 얻는 방법이 있습니까? spatstat 패키지에는 nncross라는 함수가 있지만 두 패턴 사이의 가장 가까운 이웃에만 적용되며 두 번째로 가장 가까운 이웃까지의 거리가 필요합니다.



답변

패키지 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 행에 가장 가까운 두 이웃의 x1에있는 행입니다-가장 가까운 [i, 1]이되도록 정렬되었습니다. 다음 이웃은 [i, 2]입니다.

이 함수는 또한 거리를 반환하며 매우 빠른 검색을 위해 공간 인덱스를 계산할 수있는 옵션이 있습니다.


답변

spatstatcrossdist 함수 가 있다는 것을 알았습니다 .

기술

서로 다른 두 데이터 집합에서 가져온 ‘사물’쌍 사이의 거리를 계산합니다.

두 점 패턴 X와 Y를 입력으로 취하고 [i, j] 항목이 X [i]에서 Y [j]까지의 거리 인 행렬을 반환합니다. 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)
}

나는 이미 Spacedman의 답변을 수락했지만 다른 방식으로 어떻게했는지 공유하고 싶습니다.


답변

함수 nndistspatstat패키지 인수 가지고 k이웃의 순서를 결정한다. 두 번째로 가까운 이웃 거리를 얻으려면을 사용하십시오 k=2. 첫 번째 이웃과 두 번째 이웃을 모두 얻으려면을 사용하십시오 k=1:2.


답변