2017-05-04 24 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

相關問題