获取每个经度和纬度的栅格平均值

Obtaining raster mean for each longitude and latitude

我有几个每日降水量的 .nc 文件(从 1981 年到 2010 年的 1 月到 12 月)我使用本教程堆叠了所有的 1 月:

这是其中一层的外观:

class       : RasterLayer 
band        : 1  (of  31  bands)
dimensions  : 400, 1440, 576000  (nrow, ncol, ncell)
resolution  : 0.25, 0.25  (x, y)
extent      : -180, 180, -50, 50  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : F:\CHIRPS\chirs-v2.0.1981.01.days_p25.nc 
names       : X01 
z-value     : 1981-01-01 
zvar        : precip 

我想做的是获取每一层的每个经度和纬度的平均值。基本上就是从日数据中获取月均值。

我试过这样的 CellStats 函数:

promedio <- cellStats(x, stat = 'mean', na.rm = TRUE) 

但它只为每一层提供一个值。

有什么办法吗??

不使用cellStats,即每个栅格图层汇总一个值。只需使用均值函数即可 return 栅格图层,每个像素均具有均值。请看下面的例子。 s_avg 是最终输出。

library(raster)

# Create three example rasters
r1 <- raster(ncol = 5, nrow = 5)
r1[] <- 1
r2 <- r1 + 2
r3 <- r2 + 2

# Create a raster stack
s <- stack(r1, r2, r3)
s
# class       : RasterStack 
# dimensions  : 5, 5, 25, 3  (nrow, ncol, ncell, nlayers)
# resolution  : 72, 36  (x, y)
# extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
# names       : layer.1, layer.2, layer.3 
# min values  :       1,       3,       5 
# max values  :       1,       3,       5

# Use cellStats
cellStats(s, stat = "mean")
# layer.1 layer.2 layer.3 
#       1       3       5

# Use mean
s_avg <- mean(s)
s_avg
# class       : RasterLayer 
# dimensions  : 5, 5, 25  (nrow, ncol, ncell)
# resolution  : 72, 36  (x, y)
# extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
# data source : in memory
# names       : layer 
# values      : 3, 3  (min, max)

不是 R 解决方案,但您也可以使用 CDO 从命令行 (bash) 执行此操作,以计算所有 1 月天数的时间平均值。

您可以像这样将一月份的所有文件合并在一起

cdo mergetime chirs-v2.0.????.01.days_p25.nc january.nc

然后做时间的意思:

cdo timmean january.nc january_mean.nc