将几个 NetCDF 组合成一个文件,每个维度的平均值
Combining several NetCDF into a single file with mean values for each dimension
我有 3 个 NetCDF 文件,其中包含 1981 年至 2010 年间每月平均日温度范围 (dtr) 的数据。一个文件涵盖 10 年的时间段,因此每个像素有 10 x 12 个值(每月 1 个值x 10 年)。可以下载文件 here(需要登录)。
我想将所有这些文件合并为一个文件,其中包含这 3 个文件涵盖的整个期间的每月平均 dtr。这个想法是最终每个像素有 12 个值(30 年的 1 个平均每月值)。
我以前没有使用 NetCDF 格式的经验,也不太了解它的结构。我尝试了 ncdump
包中的 NetCDF
函数,但我并没有从中学到很多东西……
不幸的是,执行以下操作只会计算 30 年的平均 dtr。
"GIS/Clim/BioClim/dtr/" %>%
list.files(pattern = "\.nc$", full.names = TRUE) %>%
raster::stack() %>%
raster::overlay(fun = mean)
这是我从一个文件中的单个像素中提取数据时得到的结果:
library(tidyverse)
library(sf)
p <- tibble(lat = 45.76, lon = -107.12) %>%
st_as_sf(coords = c("lon", "lat"), crs = 4326)
raster::stack("GIS/Clim/dtr/cru_dtr-2001_2010.nc") %>%
raster::extract(p, df = TRUE)
# X2001.01.16 X2001.02.15 X2001.03.16 X2001.04.16 X2001.05.16 X2001.06.16
# 1 11.1 11.3 10.8 9.900001 9.800000 9.400001
# X2001.07.16 X2001.08.16 X2001.09.16 X2001.10.16 X2001.11.16 X2001.12.16
# 1 10.100000 8.6 10.200000 9.500000 9.5 9.3
# X2002.01.16 X2002.02.15 X2002.03.16 X2002.04.16 X2002.05.16 X2002.06.16
# 1 10.6 10.7 10.3 9.0 9.600000 9.1
#
# ... ... ...
#
# X2010.07.16 X2010.08.16 X2010.09.16 X2010.10.16 X2010.11.16 X2010.12.16
# 1 9.000000 9.0 8.900001 8.800000 8.3 8.3
我如何合并这 3 个 NetCDF 文件并计算每月平均 dtr 以创建一个新的 NetCDF?
请注意,Python 解决方案也适用于我。
很难回答,因为您没有提供一些简单的示例数据。但它会是这样的
library(raster)
filenames <- c("one.nc", "two.nc", "three.nc")
b <- lapply(filenames, brick)
s <- stack(b)
m <- stackApply(s, 1:12, mean)
我有 3 个 NetCDF 文件,其中包含 1981 年至 2010 年间每月平均日温度范围 (dtr) 的数据。一个文件涵盖 10 年的时间段,因此每个像素有 10 x 12 个值(每月 1 个值x 10 年)。可以下载文件 here(需要登录)。
我想将所有这些文件合并为一个文件,其中包含这 3 个文件涵盖的整个期间的每月平均 dtr。这个想法是最终每个像素有 12 个值(30 年的 1 个平均每月值)。
我以前没有使用 NetCDF 格式的经验,也不太了解它的结构。我尝试了 ncdump
包中的 NetCDF
函数,但我并没有从中学到很多东西……
不幸的是,执行以下操作只会计算 30 年的平均 dtr。
"GIS/Clim/BioClim/dtr/" %>%
list.files(pattern = "\.nc$", full.names = TRUE) %>%
raster::stack() %>%
raster::overlay(fun = mean)
这是我从一个文件中的单个像素中提取数据时得到的结果:
library(tidyverse)
library(sf)
p <- tibble(lat = 45.76, lon = -107.12) %>%
st_as_sf(coords = c("lon", "lat"), crs = 4326)
raster::stack("GIS/Clim/dtr/cru_dtr-2001_2010.nc") %>%
raster::extract(p, df = TRUE)
# X2001.01.16 X2001.02.15 X2001.03.16 X2001.04.16 X2001.05.16 X2001.06.16
# 1 11.1 11.3 10.8 9.900001 9.800000 9.400001
# X2001.07.16 X2001.08.16 X2001.09.16 X2001.10.16 X2001.11.16 X2001.12.16
# 1 10.100000 8.6 10.200000 9.500000 9.5 9.3
# X2002.01.16 X2002.02.15 X2002.03.16 X2002.04.16 X2002.05.16 X2002.06.16
# 1 10.6 10.7 10.3 9.0 9.600000 9.1
#
# ... ... ...
#
# X2010.07.16 X2010.08.16 X2010.09.16 X2010.10.16 X2010.11.16 X2010.12.16
# 1 9.000000 9.0 8.900001 8.800000 8.3 8.3
我如何合并这 3 个 NetCDF 文件并计算每月平均 dtr 以创建一个新的 NetCDF?
请注意,Python 解决方案也适用于我。
很难回答,因为您没有提供一些简单的示例数据。但它会是这样的
library(raster)
filenames <- c("one.nc", "two.nc", "three.nc")
b <- lapply(filenames, brick)
s <- stack(b)
m <- stackApply(s, 1:12, mean)