首页 > 解决方案 > 我有 2 个数据框,每个数据框都有纬度和经度。我想为 df1 中的每个点找到离 df2 最近的 5 个点

问题描述

我尝试了逐行的方法,如下所示:

library(geosphere)
best <- 1000000
for ( var1 in df1 )
    { findpoint <- c(df1$longitude[var1], df1$latitude[var1])
      for ( var2 in df2 )
        { basepoint <- c(df2$longitude[var2], df2$latitude[var2])
          dis <- distHaversine( basepoint, findpoint, 6378137)
          if (dis < best) {best <- dis
        }  
      print ( best)
    }

并得到“.pointsToMatrix(p1) 中的错误:向量的长度错误,应为 2”

我想使用一种没有任何外部函数的方法,这样我就可以确认使用一个方法的结果。当然,我实际上会寻找最好的 5 分并用 df1 数据记录他们的信息。

标签: rhaversinegeosphere

解决方案


这是与某个值相比,打印出与某个数字最接近的 5 个值的代码。如果您正在执行多个值,则可以循环。

#data
x=c(1:100)
#value to match to
your.number=5.43

#find differences
diff <- abs(x-your.number)
#find smallest differences
sort <- sort(diff)[1:5]

#find values
for (i in (1:length(sort))){
 print(which(diff == sort[i]))
}
#output
[1] 5
[1] 6
[1] 4
[1] 7
[1] 3

如果需要,您还可以在循环中保存这些值。

这也可能有帮助:r-find 在向量中的两个最接近的值


推荐阅读