【问题标题】:Getting single variable from multiple NetCDF files using loop in R使用 R 中的循环从多个 NetCDF 文件中获取单个变量
【发布时间】:2018-05-13 13:55:14
【问题描述】:

如果我有 n 个名为 nc.data_1、nc.data_2... nc.data_n 的文件,我如何从所有文件中获取相同的变量并将它们存储到 R 中的单个数组中? (即(a)获取时间,然后(b)分别从 n 个文件中获取具有维度的降水数据:[l​​on, lat, time] = [144, 91, 24])。下面的代码是我到目前为止所做的。

数据路径:https://www.dropbox.com/sh/m8u3xwm5za7m7mc/AACHq2AjeZaxHm1sEhaOJ_g2a/2011?dl=0

## Call library functions for future plot
library(abind)
library(fields)
library(maps)
library(ncdf4)

## create an empty list that saves the incoming files
nc.data<-list()
list.filenames<-list.files(pattern = ".nc")

## Read in all data files using a loop
for(i in 1:length(list.filenames)){
nc.data[[i]]<-nc_open(list.filenames[[i]])
}

## Getting lat and lon from a single file since they're the same for all files
lat_2x25 <- ncvar_get(nc.data[[1]], 'lat')
lon_2x25 <- ncvar_get(nc.data[[1]], 'lon')

对于时间变量,由于每个文件中的时间不同(每个文件存储一天的数据),我不能使用与lat和lon相同的方法

【问题讨论】:

  • 为什么不直接使用raster::stack(x)raster::brick(x),其中x 是您要堆叠的文件名列表。然后我可能会将它们保留为砖块或堆栈(空间数据比数组好得多),但如果你真的需要一个数组而不是 as.array 是你的朋友。
  • 您是否尝试过以下解决方案?有帮助吗?

标签: r netcdf netcdf4


【解决方案1】:

不是 R 解决方案,但如果在 linux 中您可以先使用 CDO(我假设您将文件名写回前面,因为扩展名“.nc”通常放在末尾):

cdo merge data_*.nc merge_file.nc
cdo selvar,variable_name merge_file.nc variable.nc

然后你可以简单地在 R 中打开并阅读后者。

【讨论】:

    猜你喜欢
    • 2019-07-01
    • 2020-09-03
    • 2016-02-15
    • 2015-07-12
    • 2021-05-08
    • 2020-03-10
    • 2012-09-16
    • 2019-01-03
    • 1970-01-01
    相关资源
    最近更新 更多