我有几个日常降水的.nc文件(1981年至2010年1月 - 12月)我使用本教程堆叠了所有的Januarys:Merge netCDF files in R
这是其中一个层的外观:
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)
但它只为每层提供了一个值。
关于如何做的任何想法??
答案 0 :(得分:1)
不要使用cellStats
,即为每个栅格图层汇总一个值。只需使用mean函数就会返回一个带有每个像素均值的栅格图层。请参阅以下示例。 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)
答案 1 :(得分:0)
不是R解决方案,但您也可以使用CDO从命令行(bash)执行此操作,以获得所有1月份的时间平均值。
您可以像这样合并所有1月份的文件
cdo mergetime chirs-v2.0.????.01.days_p25.nc january.nc
然后做时间意味着:
cdo timmean january.nc january_mean.nc