Объединить файлы netcdf для усреднения значений переменных в R

Предположим, у нас есть 10 из этих файлов. Этот набор данных netcdf имеет переменную с именем tmp, которая является 3-мерным массивом: [lon][lat][time], Теперь, как мне объединить эти 10 файлов, чтобы получить один файл с переменной tmp, значения которой являются средним из объединенных значений.

Я думал, что смогу сделать это ncra ( http://nco.sourceforge.net/nco.html), но безуспешно.

1 ответ

Решение

Вы можете использовать ncdf пакет для чтения 10 файлов в R, объединить их в один большой nlon x nlat x time x nfiles использование массива abind от abind пакет, а затем с помощью apply усреднить file измерение. Все это предполагает, что у вас достаточно ОЗУ для загрузки этих 10 наборов данных в память, то есть они не могут быть слишком большими.

В качестве альтернативы я хотел бы взглянуть на CDO, который является инструментом командной строки для манипулирования файлами NetCDF. Там также может быть способ получить то, что вы хотите от этого инструмента. Это может быть более удобным для памяти вариантом.

Решение CDO заключается в использовании команды ensmean, "ens" относится к ансамблевым операциям над несколькими файлами. Таким образом, базовая команда для усреднения 3 входных файлов будет:

cdo ensmean file1.nc file2.nc file3.nc   ensemble_mean.nc

Очевидно, что набирать длинный список имен файлов утомительно, поэтому лучше использовать подстановочные знаки. Поэтому, если у вас есть такие имена файлов, как file01.nc, file02.nc и т. Д., Вы можете использовать

cdo ensmean file*.nc ensemble_mean.nc 

Обратите внимание, что, поскольку эти команды не знают, сколько будет входных файлов, вы не можете комбинировать эту команду с другими операторами CDO, используя процесс конвейерной обработки.

Другие вопросы по тегам