我正在每天观察以.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]]