我正在每天观察以.nc文件组织的气候数据。
我使用光栅包的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)


谢谢

最佳答案

您可以使用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]]

08-24 14:14