Làm thế nào để có được hàng xóm gần thứ hai giữa hai mẫu điểm trong R?


12

Có cách nào để có được khoảng cách cho hàng xóm gần thứ hai giữa hai mẫu điểm trong R không? Gói spatstat có một chức năng gọi là nncross nhưng nó chỉ áp dụng cho các hàng xóm gần nhất giữa hai mẫu và tôi cần khoảng cách đến các hàng xóm gần thứ hai.

Câu trả lời:


9

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.


Cảm ơn. Ran vào một chút của một vấn đề mặc dù. Dữ liệu của tôi thuộc lớp 'ppp' (để sử dụng với spatstat). Khi tôi cắm nó vào get.knnw, tôi gặp lỗi sau> Lỗi trong get.knnx (rp, ponderosa, 2): danh sách phải được sao chép trong .C
RK

Chỉ cần lấy tọa độ ra bằng cách sử dụng as.data.frame trên đối tượng ppp của bạn.
Spainedman

Nndist và nnwhich cũng sẽ được lên cho nhiệm vụ này? Chỉ cần chú ý hai chức năng này trong danh sách r-sig-Geo ngày hôm nay ...
Roman Luštrik

nndist và nnwhich chỉ tính khoảng cách gần nhất trong một mẫu điểm duy nhất (đó là những gì get.knn làm), không phải từ một loại điểm đến một loại điểm khác (đó là những gì get.knnx làm). Ngoài ra, get.knn nhanh gấp đôi so với nndist nếu bạn sử dụng thuật toán = "kd_tree".
Spainedman

@Spacesman Đã hiểu. Cảm ơn người đàn ông. Tôi chỉ thấy crossdist. Nó dường như hoạt động như get.knnx. Sẽ thử nó là tốt. Tôi đã kết thúc bằng cách sử dụng cbind và sau đó nhận tọa độ X và Y trước khi tôi đọc nhận xét của bạn. Cảm ơn rất nhiều. R người mới ở đây. Chủ yếu là một anh chàng Python.
RK

6

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.


0

Hàm nndisttrong spatstatgói có một đối số kxá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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.