2017-05-04 74 views
1

我有一个函数,我正在计算经纬度坐标(在SpatialPoints)和另一个坐标矢量(也在SpatialPoints)之间的最小距离的指数, 。我用找到分钟DIST的功能是:第二,第三,..分与指数函数的指数

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

功能上面给我一个柱mindist在我的预先存在的数据帧dfdist其是其中的最小距离发生点的行号的索引。

我还想找到第二分钟距离和第三分钟dist,但我不确定如何使用apply()来做到这一点。是否有替代which.min这将给我第二分钟的指数?第三分钟?

+1

也许'和'rank' which'结合?如:'which(rank(your_data)== 2)'。不过,要注意关系。 – coffeinjunky

回答

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) 
+0

我不知道为什么,但这似乎最小化我的坐标向量的纬度变化,但不会使函数最小化。我距离其他坐标疯狂的距离。这只是最小化一列? –

+0

糟糕。这就是我仅在单调矢量上进行测试的结果。这些功能现在已被纠正。 – Benjamin

相关问题