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