在R中合并netCDF文件

4
我有两个netCDF文件(每个.nc文件都有4个变量:易感、感染、康复和居住。每个变量的维度为64 x 88)。我想将这两个文件合并成一个netCDF文件,使得合并后的文件分别堆叠来自两个文件的易感、感染、康复和居住数据。这是两个文件(firstsecond)。请问有人可以帮我吗?谢谢! Ashok

“stack separately” 是什么意思? - Bart
你的新变量应该是(64, 176)还是(128, 88)的尺寸呢? - JanLauGe
“分别堆叠”指将数组放置在彼此上方。例如,file1中的易感人群是0001时刻的,而file2中的易感人群是0002时刻的,以此类推。如果netcdf文件中的变量(在我的情况下为易感、感染和康复)具有时间上下文,则可以使用名为Panoply的免费工具创建动画。 - Ashok
1个回答

6
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)

更新: 另一种方法是使用如下所示的raster包。我没有找到如何制作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')
}

我明天会尽快处理这个问题。 - JanLauGe
我更新了我的答案,展示了使用“raster”包的另一种方法。如果这个方法适用于您,请告诉我。 - JanLauGe
1
谢谢 @JanLauGe,你的代码完全符合我的要求。非常感谢。 - Ashok
太好了听到这个消息。请接受我的答案(通过点击帖子左侧的勾号)。 - JanLauGe
@JanLauGe netCDF没问题,因为CMIP5遵循netCDF标准规则。我的所有数据都是三维数组格式(经度、纬度和时间)。dim(input.nc)为144 90 60,使用你的方法后,我的dim(dat_new)为777600 2。然后file_new3出现了上述错误。我尝试使用abind而不是cbind来保持数组格式,但它不起作用。 - fvfaleiro
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接