gpt4 book ai didi

r - 在 R 中的栅格堆栈上查找第二高值

转载 作者:行者123 更新时间:2023-12-02 04:42:40 25 4
gpt4 key购买 nike

在 R 中,我可以使用最大/最小命令轻松计算地理配准栅格堆栈中每个像元的最大/最小值。

set.seed(42)
require(raster)
r1 <- raster(nrows=10, ncols=10)
r2=r3=r4=r1
r1[]= runif(ncell(r1))
r2[]= runif(ncell(r1))+0.2
r3[]= runif(ncell(r1))-0.2
r4[]= runif(ncell(r1))
rs=stack(r1,r2,r3,r4)
plot(rs)
max(rs)
min(rs)

但是,我一直在尝试找到一种方法来找到堆栈中第二高的值。在我的例子中,堆栈上的每个栅格表示特定模型在空间中的性能。我想比较第一最佳值和第二最佳值,以确定最佳模型比亚军好多少,而不必将我的堆栈转换为矩阵,然后再转换回光栅。有什么想法或建议吗??

最佳答案

您可能想要使用 calc(),根据您的具体情况调整下面的代码。只是为了表明它像宣传的那样工作,我分别绘制了通过在 4 层 RasterStack 对象的每个单元格中找到的最高值、第二高值、第三高值和第四高值形成的图层。

zz <- range(cellStats(rs, range))

par(mfcol=c(2,2))
plot(calc(rs, fun=function(X,na.rm) X[order(X,decreasing=T)[1]]), main="1st",zlim=zz)
plot(calc(rs, fun=function(X,na.rm) X[order(X,decreasing=T)[2]]), main="2nd",zlim=zz)
plot(calc(rs, fun=function(X,na.rm) X[order(X,decreasing=T)[3]]), main="3rd",zlim=zz)
plot(calc(rs, fun=function(X,na.rm) X[order(X,decreasing=T)[4]]), main="4th",zlim=zz)

或者,更紧凑、更高效,只需构造一个新的栅格堆栈来保存重新排序的值,然后绘制其图层:

zz <- range(cellStats(rs, range))
rs_ord <- calc(rs, fun=function(X,na.rm) X[order(X,decreasing=T)])

par(mfcol=c(2,2))
plot(rs_ord[[1]], main="1st", zlim=zz)
plot(rs_ord[[2]], main="2nd", zlim=zz)
plot(rs_ord[[3]], main="3rd", zlim=zz)
plot(rs_ord[[4]], main="4th", zlim=zz)

enter image description here

关于r - 在 R 中的栅格堆栈上查找第二高值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20479255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com