如何计算栅格堆栈的变化百分比?
How to calculate percentage of change from a raster stack?
我有一个土地覆盖图的栅格堆栈(年度时间序列),我想计算变化的百分比。我找到了 this question,但我不清楚。任何想法如何做到这一点?
假设我的栅格堆栈名为 r_stk
,目前我计算的唯一统计数据是 sd
和 cv
。
关于如何计算百分比变化有什么想法吗?
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
我有一个土地覆盖图的栅格堆栈(年度时间序列),我想计算变化的百分比。我找到了 this question,但我不清楚。任何想法如何做到这一点?
假设我的栅格堆栈名为 r_stk
,目前我计算的唯一统计数据是 sd
和 cv
。
关于如何计算百分比变化有什么想法吗?
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