计算整个栅格图层的平均值

问题描述

我正在尝试对降水数据求平均,该数据是栅格砖形式的对象(该对象称为“ Prec”)。 “ Prec”具有95层。但是,该想法是仅对前20层进行平均。例如,将第一层的第一网格单元与第二层的第一网格单元进行平均,然后将第三层,第四层……一直到第20层进行平均。这将针对每一层的所有网格单元(每层8192个单元)完成。这是“ Prec”对象的样子:

Prec

class       : RasterBrick 
dimensions  : 64,128,8192,95  (nrow,ncol,ncell,nlayers)
resolution  : 2.8125,2.789327  (x,y)
extent      : -181.4062,178.5938,-89.25846,89.25846  (xmin,xmax,ymin,ymax)
coord. ref. : +proj=longlat +datum=wgs84 +ellps=wgs84 +towgs84=0,0 
data source : C:/Users/Rain/Documents/My documents/All netCDF files/netcdffiles/MaxPrecIPSLIPSL- 
CM5B-LRrcp85.nc 
names       : X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12,X13,X14,X15,... 
z-value     : 1,95 (min,max)
varname     : onedaymax 

我尝试了以下操作:

ncfname <- "MaxPrecIPSLIPSL-CM5B-LRrcp85.nc"
Prec <- brick(ncfname,var="onedaymax")
sm <- mean(Prec[1:20],na.rm=TRUE) #Attempting to calculate the mean by isolating first 20 layers 
(example: Grid cell #1 of layer #1 is averaged with Grid cell #1 of layer #2....all the way to layer 
#20 

sm
[1] 20.8997

在此过程中,它仅返回一个值,与之相对的是20层中的8192个平均值的单层。为什么会这样?

我们将不胜感激!

解决方法

问R问题时,请始终附上最小的,独立的,可复制的示例。也就是说,不要引用您使用的文件,而是使用代码创建一些数据或使用R附带的数据。

library(raster)
b <- brick(system.file("external/rlogo.grd",package="raster"))

获取所有(在本例中为3个)层的平均值

m <- mean(b)

获取前两层的平均值

m <- mean(b[[1:2]])

请注意,双括号[[用于子集图层。单括号[用于提取值。因此b[1:2]返回前两个单元格的值。参见?raster::subset