Câu trả lời:
Hàm get.knnx trong gói FNN có thể tính toán các lân cận N gần nhất theo các mẫu điểm.
x1 = cbind(runif(10),runif(10))
x2 = cbind(runif(10),runif(10))
nn = get.knnx(x1,x2,2)
bây giờ nn $ nn.index là một ma trận sao cho nn $ nn.index [i, j] là hàng trong x1 của hai hàng xóm gần nhất với hàng i trong x2 - được sắp xếp sao cho gần nhất là [i, 1] và hàng xóm tiếp theo là [i, 2].
Hàm này cũng trả về khoảng cách cho bạn và có một số tùy chọn để tính toán các chỉ mục không gian cho các tìm kiếm rất nhanh.
Tôi mới phát hiện ra rằng spatstat có chức năng crossdist .
Sự miêu tả
Tính khoảng cách giữa các cặp 'vật' được lấy từ hai bộ dữ liệu khác nhau.
Nó lấy hai mẫu điểm X và Y làm đầu vào và trả về ma trận có mục nhập [i, j] là khoảng cách từ X [i] đến Y [j]. Để có được hàng xóm gần thứ hai bằng cách sử dụng 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)
}
Tôi biết tôi đã chấp nhận câu trả lời của Spacesman nhưng tôi muốn chia sẻ cách tôi đã làm theo cách khác.
Hàm nndist
trong spatstat
gói có một đối số k
xác định thứ tự của hàng xóm. Để có được khoảng cách hàng xóm gần thứ hai, sử dụng k=2
. Để có được cả hàng xóm thứ nhất và thứ hai, sử dụng k=1:2
.