【问题标题】:Distance between points in R: distCosine() for a table?R中点之间的距离:表格的distCosine()?
【发布时间】:2016-01-12 12:13:33
【问题描述】:

我有一个位置列表,我想知道最近点之间的距离。我尝试使用 distCosine() 但有一个问题。这是我所做的:

  1. 我的数据,按纬度排序

    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. 在关于 stackoverflow 的其他讨论之后,我尝试使用 distCosine() 在新列中包含与最近纬度的距离(这就是我按纬度排序的原因):

data$a

结果不行……这不是每个点的距离……

有没有更简单的方法可以为我的请求使用 distCosine?

【问题讨论】:

  • 我实际上离 data$a 不远

标签: r distance


【解决方案1】:

我认为您只需将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
> 

【讨论】:

    【解决方案2】:

    通过其他功能得到它:

     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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      相关资源
      最近更新 更多