gpt4 book ai didi

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

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

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

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