ระยะห่างระหว่างจุดใน R: distCosine() สำหรับตาราง?

ฉันมีรายการตำแหน่งและอยากทราบระยะทางระหว่างจุดที่ใกล้ที่สุด ฉันพยายามใช้ distCosine() แต่มีปัญหา นี่คือสิ่งที่ฉันทำ:

  1. ข้อมูลของฉัน เรียงตาม lat

    structure(list(lat = c(53.56478, 53.919724, 54.109047, 54.109047, 
    54.36612, 55.48143, 56.2335, 56.682796, 56.93616, 57.804092, 
    58.82089, 59.297623, 59.335075, 59.907795, 60.125046, 60.274445, 
    60.289204, 60.386665, 60.591167, 64.68329), long = c(14.585611, 
    14.286517, 13.807847, 13.807847, 10.997632, 18.182697, 16.454927, 
    16.564703, 18.221214, 23.258204, 17.84381, 18.172949, 18.126884, 
    23.217615, 20.65724, 26.44062, 27.189545, 19.847534, 28.5585, 
    24.534185)), .Names = c("lat", "long"), row.names = c(2L, 3L, 
    6L, 11L, 1L, 17L, 15L, 20L, 13L, 19L, 7L, 14L, 4L, 5L, 10L, 12L, 
    18L, 9L, 8L, 16L), class = "data.frame")
    
  2. ฉันพยายามใช้ distCosine() หลังจากการสนทนาอื่นเกี่ยวกับ stackoverflow เพื่อรวมระยะทางจาก lat ที่ใกล้เคียงที่สุดไว้ในคอลัมน์ใหม่ (นี่คือสาเหตุที่ฉันจัดเรียงด้วย lat):

data$a‹-outer(seq(nrow(data)), seq(nrow(data)), Vectorize(function(i, j) distCosine(data[1,], data[2,])) )

ผลลัพธ์ไม่ได้ผล...นี่ไม่ใช่ระยะทางแต่ละจุด...

มีวิธีที่ง่ายกว่าในการใช้ distCosine สำหรับคำขอของฉันหรือไม่


person Floni    schedule 12.01.2016    source แหล่งที่มา
comment
จริงๆ แล้วฉันอยู่ไม่ไกลกับ data$a ‹- ​​distCosine(p1 = pts[-nrow(pts),], p2 = pts[-1,]) แต่ฉันมีข้อผิดพลาดเนื่องจากไม่มีอะไรสำหรับบรรทัดแรก .. .   -  person Floni    schedule 12.01.2016


คำตอบ (2)


ฉันคิดว่าคุณต้องแทนที่ distCosine(data[1,], data[2,]) ด้วย distCosine(data[i,c("long","lat")], data[j,c("long","lat")]):

data <- head(data,5)  # smaller example

data$a<-outer( seq(nrow(data)), 
               seq(nrow(data)), 
               Vectorize(
                 function(i, j) distCosine(data[i,c("long","lat")], data[j,c("long","lat")])
                 ) 
               )

ผลลัพธ์:

> data
        lat     long       a.1       a.2       a.3       a.4       a.5
2  53.56478 14.58561      0.00  44146.92  79251.87  79251.87 251291.54
3  53.91972 14.28652  44146.92      0.00  37741.81  37741.81 220118.16
6  54.10905 13.80785  79251.87  37741.81      0.00      0.00 185040.01
11 54.10905 13.80785  79251.87  37741.81      0.00      0.00 185040.01
1  54.36612 10.99763 251291.54 220118.16 185040.01 185040.01      0.00
> 
person mra68    schedule 12.01.2016

เข้าใจแล้วด้วยฟังก์ชั่นอื่น:

 data<-data[c("long","lat")]

 distHaversine
 t<-distHaversine(p1 = data[-nrow(data),], 
 p2 = data[-1,]) a<-0 final<-c(a,t) data$dist<-final
 a<-0
 final<-c(a,t)
 data$dist<-final
person Floni    schedule 12.01.2016