Объединение нескольких NetCDF в один файл со средними значениями для каждого измерения - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть 3 файла NetCDF, содержащих данные о среднем дневном температурном диапазоне (dtr) в месяц между 1981 и 2010 годами. Файл охватывает период 10 лет, поэтому каждый пиксель имеет 10 x 12 значений (1 значение в месяц x 10). года). Файлы можно загрузить здесь (требуется вход в систему).

Я хотел бы объединить все эти файлы в один файл, содержащий среднемесячное значение dtr за весь период, охватываемый 3 файлы. Идея состоит в том, чтобы получить 12 значений на пиксель (1 среднемесячное значение за 30 лет).

У меня нет предыдущего опыта работы с форматом NetCDF, и я не совсем понимаю его структуру. Я попробовал функцию NetCDF из пакета ncdump, но я многому из нее не научился ...

К сожалению, при выполнении следующих действий вычисляется только среднее значение dtr за 30 лет.

"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 и вычислить среднее значение по месяцам для создания нового NetCDF?

Обратите внимание, что решение Python также работает для меня.

1 Ответ

1 голос
/ 21 апреля 2020

Затруднились ответить, так как вы не предоставили несколько простых примеров данных. Но это было бы что-то вроде этого

library(raster)
filenames <- c("one.nc", "two.nc", "three.nc")
b <- lapply(filenames, brick)
s <- stack(b)
m <- stackApply(s, 1:12, mean)
...