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

时间:2019-08-28 10:40:44

标签: r statistics time-series raster

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

假设我的栅格堆栈命名为r_stk,目前我唯一计算出的统计信息是sdcv

关于如何计算百分比变化的任何想法?

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

1 个答案:

答案 0 :(得分:1)

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

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

我了解您已经这样做

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

现在,您需要“%变化”,但是您没有定义它。请编辑您的问题,并更好地解释您要计算的内容。您是否要局部更改(在一个单元格的基础上一个单元格);但是,如果是这样,您将如何计算百分比?还是您要全局使用它(每个层/时间段一个数字)。您是否要比较所有时间段?还是??

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

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

单元格有变化吗?

y <- any(x)

相对于第一年,细胞总数的变化百分比是多少?

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

或相对于第一年的每个“年份”。

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