我有一个土地覆盖图的栅格堆栈(每年时间序列),我想计算变化的百分比。我找到了this question,但不清楚。任何想法如何做到这一点?
假设我的栅格堆栈命名为r_stk
,目前我唯一计算出的统计信息是sd
和cv
。
关于如何计算百分比变化的任何想法?
r_stk_sd<-calc(r_stk, fun=sd)
r_stk_cv<-r_stk_sd/r_stk_Mean
答案 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