【问题标题】:Sum nlayers of a rasterStack in RR中rasterStack的总和
【发布时间】:2015-10-26 05:09:52
【问题描述】:

我正在处理以 .nc 文件组织的气候数据的日常观测。 我使用 raster 包的 stack 命令读取它们。每个文件(对应一年)是一个 RasterStack 元素,具有以下特点:

class       : RasterStack 
dimensions  : 360, 720, 259200, 365  (nrow, ncol, ncell, nlayers)
resolution  : 0.5, 0.5  (x, y)
extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax) 

每一层都是一天的值的栅格。
我想对图层求和以计算每月值。我相信解决方案应该使用 calc 或 stackApply {raster},但我找不到从 x 层到 y 层求和的方法,或者在求和之前对 RasterStack 进行子集化的方法。

我准备了一个只有 12 层的example file(以减小大小)。

我不完全知道如何提出代码,抱歉,但应该是这样的:

library(raster)
setwd("myfolder")
data<-stack(mydata.nc)

datasum<- stackApply(data, ??? ,fun=sum)

谢谢

【问题讨论】:

    标签: r r-raster


    【解决方案1】:

    您可以使用stackApply 来执行此操作。使用您的示例数据,看起来每个栅格图层的名称都是日期。您可以使用它来构建需要传递给stackApply 的索引。

    1 月份的索引列表需要 31 个 1 等。

    你可以这样做:

        #get the date from the names of the layers and extract the month
        indices <- format(as.Date(names(data), format = "X%Y.%m.%d"), format = "%m")
        indices <- as.numeric(indices)
    
        #sum the layers
        datasum<- stackApply(data, indices, fun = sum)
    

    结果将是一个 12 层的栅格堆栈。

    要从堆栈中子集栅格图层,您可以执行data[[c(1,2]]

    【讨论】:

    • 这种方法是否适合并行化以减少运行时间?
    【解决方案2】:

    我遇到了同样的问题,要计算长时间序列 .nc 文件的平均值,但是 stackApply 对我不起作用。

    我设法使用calc 解决了问题。所以你也可以使用:

    #sum the layers
    datasum <- calc(data,fun=function(x) { by(x, indices, sum)})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-18
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多