我有一个函数,我计算纬度/经度坐标(在SpatialPoints
)和另一个坐标向量(也在SpatialPoints
)之间的最小距离的索引。我用来查找min dist的函数是:
library(rgeos)
dfdist$mindist <-apply(gDistance(sp1, sp2, byid=TRUE), 1, which.min)
上面的函数在我预先存在的数据框mindist
中为我提供了一列dfdist
,它是最小距离发生点的行号的索引。
我也希望找到第2分钟距离和第3分钟距离,但我不确定如何使用apply()
执行此操作。是否有which.min
的替代品,它会给我第二分钟的索引?第三分钟?
答案 0 :(得分:1)
您可以使用此用户定义的函数执行此操作:
f_which.min <- function(vec, idx) sort(vec, index.return = TRUE)$ix[idx]
所以你可以使用:
apply(gDistance(sp1, sp2, byid=TRUE), 1, f_which.min, idx = 1)
相应地设置参数idx
。也就是说,idx=1
第一分钟,idx=2
秒分钟等等。
答案 1 :(得分:0)
我会使用以下功能:
which_nmin <- function(x, n = 1)
{
ux <- unique(x)
ux <- ux[order(ux)][n]
which(x == ux)
}
which_nmin(c(1, 1, 1, 1:5), 3)
which_nmax <- function(x, n = 1)
{
ux <- unique(x)
ux <- ux[order(ux, decreasing = TRUE)][n]
which(x == ux)
}
which_nmax(c(1, 1, 1, 1:5), 2)
您的apply
来电
apply(gDistance(sp1, sp2, byid=TRUE), 1, which_nmin, n = 2)