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

时间:2018-02-16 21:35:38

标签: r raster netcdf r-raster

我有几个日常降水的.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) 

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

关于如何做的任何想法??

2 个答案:

答案 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