【问题标题】:Merge netCDF files in R在 R 中合并 netCDF 文件
【发布时间】:2017-12-19 04:28:51
【问题描述】:

我有 2 个 netCDF 文件(每个 .nc 文件有 4 个变量:Susceptible、Infected、Recovered 和 Inhabitable。每个变量的尺寸为 64 x 88)。我想将这 2 个文件合并到一个 netCDF 文件中,这样合并后的文件将分别堆叠 2 个文件易感、2 个文件感染、2 个文件恢复和 2 个文件可居住。

这是 2 个文件(firstsecond

有人可以帮我解决这个问题吗?

提前致谢, 阿肖克

【问题讨论】:

  • “单独堆叠”是什么意思?
  • 新变量的维度应该是(64, 176) 还是(128, 88)
  • “单独堆叠”是指将数组一个放在另一个上面。例如,文件 1 的易感性适用于时间 0001,而文件 2 的易感性适用于时间 0002 等。有一个名为 Panoply 的免费工具,如果 netcdf 文件具有变量的时间上下文(在我的情况下是易感的、受感染的),可以让您创建动画,恢复)。

标签: r netcdf


【解决方案1】:

ncdf4 包会做你想做的事。请看下面的代码,仅针对一个变量的示例。

#install.packages('ncdf4')
library(ncdf4)

file1 <- nc_open('England_aggr_GPW4_2000_0001.nc')
file2 <- nc_open('England_aggr_GPW4_2000_0002.nc')

# Just for one variable for now
dat_new <- cbind(
  ncvar_get(file1, 'Susceptible'),
  ncvar_get(file2, 'Susceptible'))
dim(dat_new)
var <- file1$var['Susceptible']$Susceptible

# Create a new file
file_new3 <- nc_create(
  filename = 'England_aggr_GPW4_2000_new.nc', 
  # We need to define the variables here
  vars = ncvar_def(
    name = 'Susceptible',
    units = var$units,
    dim = dim(dat_new)))

# And write to it
ncvar_put(
  nc = file_new,
  varid = 'Susceptible',
  vals = dat_new)

# Finally, close the file
nc_close(file_new)

更新: 另一种方法是使用光栅包,如下所示。我不知道如何制作 4D 栅格堆栈,因此我将您的数据拆分为每个变量一个 NCDF 文件。这对你有用吗?

#install.packages('ncdf4')
library(ncdf4)
library(raster)

var_names <- c('Susceptible', 'Infected', 'Recovered', 'Inhabitable')

for (var_name in var_names) {

  # Create raster stack
  x <- stack(
    raster('England_aggr_GPW4_2000_0001.nc', varname = var_name),
    raster('England_aggr_GPW4_2000_0002.nc', varname = var_name))

  # Name each layer
  names(x) <- c('01', '02') 

  writeRaster(x = x, 
              filename = paste0(var_name, '_out.nc'),
              overwrite = TRUE, 
              format = 'CDF')
}

【讨论】:

  • 我明天会试着调查一下
  • 更新了我的答案以显示使用 raster 包的替代方法。让我知道这是否适合您
  • 谢谢@JanLauGe,您的代码完全符合我的要求。非常感谢。
  • 很高兴听到这个消息。请接受我的回答(点击帖子左侧的勾号)
  • @JanLauGe 我在一些 CMIP5 文件中尝试了你的第一种方法,但我在“# Create a new file”中停止,因为我收到以下错误:[1]“错误,传递的变量有一个暗淡那不是 ncdim4 类的!” [1]“处理变量 pr 的第 1 号昏暗时发生错误” ncvar_def(name = "pr", units = var$units, dim = dim(dat_new)) 中的错误:此昏暗具有类:整数。你能帮帮我吗?
猜你喜欢
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 2013-12-04
  • 2015-05-11
  • 2021-01-02
  • 2018-10-10
  • 2015-11-17
  • 2022-01-08
相关资源
最近更新 更多