在 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) 数据框中哪两行的距离最小?的主要内容,如果未能解决你的问题,请参考以下文章