2015-09-16 13 views
6

Tôi chỉ mới bắt đầu học R nhưng muốn dự án được thực hiện sớm hơn là sau này. Nó khá đơn giản: Tôi có một cột X và cột Y bao gồm các tọa độ X và tọa độ Y. (Làm việc trong hệ tọa độ NAD27). Đi từ tọa độ đầu tiên, tôi muốn tìm điểm gần nhất trong tập dữ liệu và sau đó chuyển sang tọa độ tiếp theo và tìm điểm gần nhất trong cùng một tập dữ liệu. Lý tưởng nhất, nó sẽ đi qua từng điểm và xác định điểm gần nhất.Tìm tọa độ X, Y gần nhất bằng R

point x   y 
1  1601774 14544454 
2  1616574 14579422 
3  1608698 14572922 
4  1602948 14572990 
5  1607355 14573871 
6  1615336 14578178 
7  1603398 14574495 
8  1605153 14570727 
9  1606758 14573845 
10 1606655 14570953 
+3

Chào mừng bạn đến với Stack Overflow! Vui lòng bao gồm một tập dữ liệu mẫu nhỏ (Tôi không quen thuộc với hệ thống tọa độ NAD27 và tôi giả định rằng những người khác có thể cũng vậy). Hơn nữa, vui lòng bao gồm bất kỳ mã nào bạn đã cố thực hiện thao tác này. – josliber

+0

Tại sao điểm tiêu cực? Đó là một câu hỏi hay. Yêu cầu anh ta chỉnh sửa câu hỏi. – Soheil

+4

'sp :: spDists' hoặc' rgeos :: gDistance' nên trợ giúp, nhưng bạn sẽ cần phải thử một số thứ đầu tiên (mọi người không chỉ viết mã) – hrbrmstr

Trả lời

7

Đây là một cách, sử dụng gói RANN. Cách tiếp cận tương tự như được hiển thị trong this post, nhưng được điều chỉnh cho một tập hợp các điểm (bài đăng được liên kết là về việc tìm điểm gần nhất trong tập A đến mỗi điểm trong tập B).

xy <- read.table(text='point x   y 
1  1601774 14544454 
2  1616574 14579422 
3  1608698 14572922 
4  1602948 14572990 
5  1607355 14573871 
6  1615336 14578178 
7  1603398 14574495 
8  1605153 14570727 
9  1606758 14573845 
10 1606655 14570953', header=TRUE, row.names=1) 

library(RANN) 
closest <- nn2(data=xy, k=2)[[1]] 

Ở trên, chúng tôi cung cấp thiết lập duy nhất của bạn điểm, xy, để lập luận data, và xác định rằng chúng tôi muốn nn2 để tìm hai điểm gần mỗi điểm (vì điểm gần nhất là tâm điểm chinh no). Hàm nn2 trả về một danh sách có hai phần tử: một vectơ (ma trận, trong trường hợp này) là các chỉ số của mỗi điểm k gần nhất (đối với mỗi điểm truy vấn); và một vector (ma trận) của khoảng cách. Tôi giả sử chúng tôi không quan tâm đến khoảng cách, vì vậy ở trên chúng tôi sẽ đặt kết quả cho phần tử đầu tiên.

Đối với vấn đề của chúng tôi, kết quả là ma trận hai cột cho chỉ mục của điểm được truy vấn trong cột đầu tiên và chỉ mục của điểm gần nhất trong cột thứ hai.

closest 

##  [,1] [,2] 
## [1,] 1 8 
## [2,] 2 6 
## [3,] 3 5 
## [4,] 4 7 
## [5,] 5 9 
## [6,] 6 2 
## [7,] 7 4 
## [8,] 8 10 
## [9,] 9 5 
## [10,] 10 8 

Để có được một ma trận của tọa độ của các điểm gần nhất, bạn có thể sử dụng:

xy[closest[, 2], ] 

Theo mặc định nn2 sử dụng một cây kd - bạn có thể muốn thử nghiệm với treetype='bd'.

+0

Điều này có vẻ tuyệt vời.Chỉ để chắc chắn rằng tôi hiểu chính xác, điểm gần nhất để phối hợp 1, là tọa độ 8? Và với tọa độ 2, nó phối hợp 6, v.v ...? – jhenson

+0

@jhenson - đó là chính xác (tốt, điểm gần nhất để phối hợp 1 là điều phối 1, và gần nhất thứ hai là 8, nhưng có, bạn nhận được hình ảnh) – jbaums

+0

Right! Cảm ơn rất nhiều, nó làm việc tuyệt vời với dữ liệu của tôi cho đến nay. – jhenson

Các vấn đề liên quan