应用函数

时间:2017-05-04 10:54:59

标签: r dataframe apply min

我有一个函数,我计算纬度/经度坐标(在SpatialPoints)和另一个坐标向量(也在SpatialPoints)之间的最小距离的索引。我用来查找min dist的函数是:

library(rgeos)
dfdist$mindist <-apply(gDistance(sp1, sp2, byid=TRUE), 1, which.min)

上面的函数在我预先存在的数据框mindist中为我提供了一列dfdist,它是最小距离发生点的行号的索引。

我也希望找到第2分钟距离和第3分钟距离,但我不确定如何使用apply()执行此操作。是否有which.min的替代品,它会给我第二分钟的索引?第三分钟?

2 个答案:

答案 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)