second, third, .. 具有 apply 功能的索引
The index of second, third,.. min with apply function
我有一个函数,用于计算 lat/long 坐标(在 SpatialPoints
中)和另一个坐标向量(也在 SpatialPoints
中)之间的最小距离的索引。我用来查找最小距离的函数是:
library(rgeos)
dfdist$mindist <-apply(gDistance(sp1, sp2, byid=TRUE), 1, which.min)
上面的函数在我预先存在的数据框dfdist
中给了我一列mindist
,它是最小距离发生点的行号的索引。
我还想找到第 2 分钟距离和第 3 分钟距离,但不确定如何使用 apply()
执行此操作。是否有 which.min
的替代品可以给我第二分钟的索引?第三分钟?
您可以使用此用户定义的函数来执行此操作:
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
第二分钟等等。
我会使用如下函数:
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)
我有一个函数,用于计算 lat/long 坐标(在 SpatialPoints
中)和另一个坐标向量(也在 SpatialPoints
中)之间的最小距离的索引。我用来查找最小距离的函数是:
library(rgeos)
dfdist$mindist <-apply(gDistance(sp1, sp2, byid=TRUE), 1, which.min)
上面的函数在我预先存在的数据框dfdist
中给了我一列mindist
,它是最小距离发生点的行号的索引。
我还想找到第 2 分钟距离和第 3 分钟距离,但不确定如何使用 apply()
执行此操作。是否有 which.min
的替代品可以给我第二分钟的索引?第三分钟?
您可以使用此用户定义的函数来执行此操作:
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
第二分钟等等。
我会使用如下函数:
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)