r - 我有 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 数据记录他们的信息。
解决方案
这是与某个值相比,打印出与某个数字最接近的 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 在向量中的两个最接近的值
推荐阅读
- c - 改变格式说明符的位置如何改变 ac 程序的输出?
- python - 如何为每个月的 Post 查询集
- date - Sas更改日期格式
- docker - Docker 首先拉私有注册表,如果没有找到图像,则 docker hub
- xml - 报告由于 Xpath 而丢失的翻译
- rdf - 在 OWL 中推断 ABC 关系
- google-cloud-platform - Cloud SQL:实例更新不会结束
- javascript - 使用 jQuery 删除两个标签之间的文本
- android - 如何将两个项目信息保存在一个 google-services.json 中以接收来自多个发件人的 FCM 通知
- php - 如何正确使用依赖注入?因为使用注入类的方法会创建新的依赖项