【问题标题】:How to calculate percentage of change from a raster stack?如何计算栅格堆栈的变化百分比?
【发布时间】:2020-01-01 13:43:02
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: r statistics time-series raster


    【解决方案1】:

    这是一些示例数据。来自?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 年的每个“年”。

    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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 2022-11-19
      • 2015-09-07
      • 2019-01-26
      • 1970-01-01
      相关资源
      最近更新 更多