在 R 中,如何确定我的 (x,y) 数据框中哪两行的距离最小?

Posted

技术标签:

【中文标题】在 R 中,如何确定我的 (x,y) 数据框中哪两行的距离最小?【英文标题】:In R, how do I identify which two rows have minimum distance in my (x,y) dataframe? 【发布时间】:2021-02-02 18:11:37 【问题描述】:

在 R 中,我有一个 x,y 为 lat,long 的数据框。如何找到哪些行获得最小距离并在新列中分配一个数字来显示这一点?下面的一个简单示例显示了 (5,3) 和 (5,2) 两行,它们具有最小距离,C 列给它们相同的数字分组。

【问题讨论】:

This question 应该可以帮助您完成大部分工作...... 【参考方案1】:

我猜你可能需要 distm 包中的 library(geosphere)

library(geosphere)
xy <- setNames(data.frame(rbind(c(0,0),c(90,90),c(10,10),c(-120,-45))),c("lon","lat"))
d <- distm(xy)
inds <- which(min(d[d>0])==d,arr.ind = TRUE)
out <- cbind(xy,C = NA)
out$C[inds[,"row"]] <- 1

给了

> out
   lon lat  C
1    0   0  1
2   90  90 NA
3   10  10  1
4 -120 -45 NA

虚拟数据

> dput(xy)
structure(list(lon = c(0, 90, 10, -120), lat = c(0, 90, 10, -45
)), class = "data.frame", row.names = c(NA, -4L))

【讨论】:

一旦我确定了两个相关的行,我将如何创建一个对这两个点进行分类的列?我可以将这些结果映射回原始数据框吗? 谢谢。从这里开始,我将如何对其余的点进行迭代?所以我想找到下一个最小距离并将这些点分组。我特别想了解的部分是,它还在比较一个点和新分组的点之间的最小距离。 @Kate 我猜你可以从数据框中删除找到的对,然后再次做同样的事情来找到距离最小的下一对

以上是关于在 R 中,如何确定我的 (x,y) 数据框中哪两行的距离最小?的主要内容,如果未能解决你的问题,请参考以下文章

总结R数据框中因素的分布

什么函数允许我根据R中列中的值从数据框中的列中提取数据?

RODBC sqlSave() 和映射列名

如何从R数据框中的列名中删除不必要的单引号(')?

数据库规范化

在数据框中添加两个元素(基于索引)