Как объединить файлы netcdf отдельно в R? - PullRequest
0 голосов
/ 15 марта 2019

Я пользователь R и хотел бы получить некоторую помощь в следующем: У меня есть два файла netcdf (каждый размером 30x30x365) и еще один с размером 30x30x366. Эти 3 файла содержат ежедневные данные за год, где последнее измерение относится к измерению времени. Я хотел объединить их отдельно, т.е. я хотел, чтобы выходной файл содержал 30x30x1096.

Примечание: я видел похожий вопрос, но результат выдает среднее значение (то есть 30x30x3), которое мне не нужно.

Ответы [ 2 ]

2 голосов
/ 16 марта 2019

из комментария, который я вижу ниже, вы, кажется, хотите объединить 3 файла в измерении времени.В качестве альтернативы R вы можете сделать это быстро из командной строки, используя cdo (операторы климатических данных):

cdo mergetime file1.nc file2.nc file3.nc mergedfile.nc

или используя подстановочные знаки:

cdo mergetime file?.nc mergedfile.nc

cdo прост в установкепод Ubuntu:

sudo apt install cdo 
1 голос
/ 15 марта 2019

Не зная точно, какие у вас измерения и переменные, этого может быть достаточно, чтобы начать:

library(ncdf4)

output_data <- array(dim = c(30, 30, 1096))
files <- c('file1.nc', 'file2.nc', 'file3.nc')
days <- c(365, 365, 366)

# Open each file and add it to the final output array
for (i in seq_along(files)) {
    nc <- nc_open(files[i])
    input_arr <- ncvar_get(nc, varid='var_name')
    nc_close(nc)

    # Calculate the indices where each file's data should go
    if (i > 1) {
        day_idx <- (1:days[i]) + sum(days[1:(i-1)])
    } else {
        day_idx <- 1:days[i]
    }

    output_data[ , , day_idx] <- input_arr
}

# Write out output_data to a NetCDF. How exactly this should be done depends on what
# dimensions and variables you have.

# See here for more:
#   https://publicwiki.deltares.nl/display/OET/Creating+a+netCDF+file+with+R
...