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

In R, how do I identify which two rows have minimum distance in my (x,y) dataframe?

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

我猜你可能需要 distmlibrary(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))