วิธีการรับเพื่อนบ้านที่สองที่ใกล้ที่สุดระหว่างรูปแบบจุดสองจุดใน R?


12

มีวิธีการหาระยะทางสำหรับเพื่อนบ้านที่ใกล้ที่สุดที่สองระหว่างรูปแบบจุดสองจุดใน R หรือไม่? แพ็คเกจ spatstat มีฟังก์ชั่นที่เรียกว่า nncross แต่มันใช้กับเพื่อนบ้านที่ใกล้ที่สุดระหว่างสองรูปแบบเท่านั้นและฉันต้องการระยะทางกับเพื่อนบ้านที่ใกล้ที่สุดที่สอง

คำตอบ:


9

ฟังก์ชัน get.knnx ในแพ็คเกจ FNN สามารถคำนวณเพื่อนบ้านที่ใกล้ที่สุด 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] คือแถวใน x1 ของสองประเทศเพื่อนบ้านที่ใกล้เคียงที่สุดกับแถว i ใน x2 - เรียงลำดับเพื่อให้ใกล้ที่สุดคือ [i, 1] และ เพื่อนบ้านต่อไปคือ [i, 2]

ฟังก์ชั่นนี้ยังส่งคืนระยะทางสำหรับคุณและมีตัวเลือกบางอย่างในการคำนวณดัชนีเชิงพื้นที่เพื่อการค้นหาที่รวดเร็วมาก


ขอบคุณ วิ่งเข้าไปหาปัญหาเล็กน้อย ข้อมูลของฉันอยู่ในระดับ 'ppp' (สำหรับใช้กับ spatstat) เมื่อฉันเสียบเข้ากับ get.knnw ฉันได้รับข้อผิดพลาดต่อไปนี้> ข้อผิดพลาดใน get.knnx (rp, ponderosa, 2): รายการต้องซ้ำกันใน. C
RK

รับพิกัดโดยใช้ as.data.frame บนวัตถุ ppp ของคุณ
Spacedman

nndist และ nnwhich จะทำหน้าที่นี้ด้วยหรือไม่ เพิ่งสังเกตเห็นทั้งสองฟังก์ชั่นในรายการ r-sig-geo วันนี้ ...
โรมันLuštrik

nndist และ nn ซึ่งคำนวณระยะทางที่ใกล้ที่สุดภายในรูปแบบจุดเดียว (ซึ่งเป็นสิ่งที่ get.knn ทำ) ไม่ใช่จากประเภทของจุดหนึ่งไปยังอีกประเภทหนึ่งของจุด (ซึ่งเป็นสิ่งที่ get.knnx ทำ) และ get.knn นั้นเร็วกว่า nndist สองเท่าหากคุณใช้ algorithm = "kd_tree"
Spacedman

@ Spacerman เข้าใจแล้ว ขอบคุณชาย ฉันเพิ่งเห็นครอสต์ดิสต์ ดูเหมือนว่าจะทำงานเหมือน get.knnx จะลองดูเช่นกัน ฉันลงเอยด้วยการใช้ cbind แล้วรับพิกัด X และ Y ก่อนที่จะอ่านความคิดเห็นของคุณ ขอบคุณมาก. R newbie ที่นี่ ส่วนใหญ่เป็นผู้ชาย Python
RK

6

ฉันเพิ่งค้นพบว่าspatstatมีฟังก์ชั่นcrossdist

ลักษณะ

คำนวณระยะทางระหว่างคู่ของ 'สิ่งของ' ที่นำมาจากชุดข้อมูลสองชุดที่แตกต่างกัน

มันใช้รูปแบบจุดสองจุด 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 แล้ว แต่ฉันต้องการแบ่งปันวิธีที่ฉันทำในอีกทางหนึ่ง


0

ฟังก์ชั่นnndistในspatstatแพคเกจมีข้อโต้แย้งkที่กำหนดลำดับของประเทศเพื่อนบ้าน k=2เพื่อให้ได้ใกล้เคียงที่สุดที่สองระยะเพื่อนบ้านใช้ k=1:2ที่จะได้รับทั้งสองคนแรกและเพื่อนบ้านที่สองการใช้งาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.