获取每个经度和纬度的栅格平均值
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
我有几个每日降水量的 .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