如何计算栅格堆栈的变化百分比?

How to calculate percentage of change from a raster stack?

我有一个土地覆盖图的栅格堆栈(年度时间序列),我想计算变化的百分比。我找到了 this question,但我不清楚。任何想法如何做到这一点?

假设我的栅格堆栈名为 r_stk,目前我计算的唯一统计数据是 sdcv

关于如何计算百分比变化有什么想法吗?

r_stk_sd<-calc(r_stk, fun=sd)
r_stk_cv<-r_stk_sd/r_stk_Mean

这是一些示例数据。来自 ?raster::stack!

library(raster)
s <- stack(system.file("external/rlogo.grd", package="raster")) 

我知道你这样做了

 mn <- mean(s)
 sd <- calc(s, sd)
 cv <- sd / mn

现在你想要“% change”但你没有定义它。请编辑您的问题,并更好地解释您想要计算的内容。您是否想要本地更改(逐个单元格);但如果是这样,您将如何计算百分比?或者您是否希望在全球范围内使用它(每层/时间段一个数字)。您想比较所有时间段吗?或者??

还有另一种可能性,将第一层与所有其他层进行比较。也许这可以让你开始做你想做的事,或者问一个更好的问题。

x <- s[[1]] != s[[-1]]

是否有任何更改的单元格?

y <- any(x)

相对于第 1 年,细胞的总分数是多少?

cellStats(y, "mean")
#[1] 0.7923364

或相对于第 1 年的每个 "year"。

cellStats(x, "mean")
#    green      blue 
#0.6218336 0.7891218 

如果你想逐年变化,你可以

 s1 <- s[[2:nlayers(s)]]
 s2 <- s[[1:(nlayers(s)-1)]]
 z <- s1 != s2
 cellStats(z, "mean")
 #     green      blue 
 # 0.6218336 0.7672624