问题描述
我正在尝试对降水数据求平均,该数据是栅格砖形式的对象(该对象称为“ 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