如何在 R 中的栅格堆栈中找到第二高的值和相应的图层名称
How to find second highest value and corresponding layer name in a raster stack in R
我有一个 12 层的 rasterstack,我想提取第二高的值及其相应的层名称。
我找到了将我的值按降序排列到 12 个新层中的代码:
rs_ord <- calc(inraster, fun=function(X,na.rm) X[order(X,decreasing=T)])
现在,如果我只能做同样的事情,但 return 相应图层的名称,它会回答所有问题。
谢谢,
皮埃尔
根据栅格的尺寸,您可以使用以下内容,我将在 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]]
如果栅格的维度太大而无法使用上述方法,则可以依次确定每个图层的最高两个值,然后计算出哪个图层具有第二高的值:
# 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]]
我有一个 12 层的 rasterstack,我想提取第二高的值及其相应的层名称。 我找到了将我的值按降序排列到 12 个新层中的代码:
rs_ord <- calc(inraster, fun=function(X,na.rm) X[order(X,decreasing=T)])
现在,如果我只能做同样的事情,但 return 相应图层的名称,它会回答所有问题。
谢谢, 皮埃尔
根据栅格的尺寸,您可以使用以下内容,我将在 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]]
如果栅格的维度太大而无法使用上述方法,则可以依次确定每个图层的最高两个值,然后计算出哪个图层具有第二高的值:
# 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]]