代码之家  ›  专栏  ›  技术社区  ›  Ashok

在R中合并netCDF文件

  •  4
  • Ashok  · 技术社区  · 9 年前

    我有2个netCDF文件(每个.nc文件有4个变量:易受感染、已感染、已恢复和可居住。每个变量的维数为64 x 88)。我想将这两个文件合并到一个netCDF文件中,这样合并的文件将与这两个文件分开堆叠,从这两个文件中感染,从这两个文件中恢复,并从这两个文件中居住。

    这是2个文件( first second

    谁能帮我一下吗?

    提前感谢, 阿肖克

    1 回复  |  直到 9 年前
        1
  •  5
  •   JanLauGe    9 年前

    这个 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')
    }