12レイヤーのラスタースタックがあり、2番目に高い値とそれに対応するレイヤー名を抽出したいと思います。値を降順で12の新しいレイヤーに並べ替えるコードを見つけました。
rs_ord <- calc(inraster, fun=function(X,na.rm) X[order(X,decreasing=T)])
さて、同じことしかできず、対応するレイヤーの名前を返すと、すべてに答えることになります。
ありがとう、ピエール
ラスターのサイズによっては、以下を使用できる場合があります。これについては、RasterStackのダミーデータを使用して説明しますs
。
library(raster)
s <- stack(replicate(12, raster(matrix(runif(100000), 1000))))
# coerce s to a data.frame
d <- s[]
# return the second-highest value
sort(d, decreasing=TRUE)[2]
# identify the column containing the second-highest value
col(d)[order(d, decreasing=TRUE)[2]]
ラスターの寸法が大きすぎて上記のアプローチを使用できない場合は、代わりに各レイヤーの最も高い2つの値を順番に識別してから、2番目に高い値を持つレイヤーを特定できます。
# return a matrix whose columns contain the top two values per layer
top_two <- sapply(seq_len(nlayers(s)), function(i) {
sort(s[[i]][], decreasing=TRUE)[1:2]
})
# return the second-highest value
sort(top_two, decreasing=TRUE)[2]
# identify the column containing the second-highest value
col(top_two)[order(top_two, decreasing=TRUE)[2]]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加