我有2个netCDF文件(每个.nc文件有4个变量:敏感,感染,恢复和居住,每个变量的尺寸为64 x 88)。我想将这两个文件合并到一个单独的netCDF文件中,这样合并的文件将分别堆叠。从2个文件中感受敏感,从2个文件中感染,从2个文件中恢复,并从2个文件中居住。合并NetCDF文件在R
谁能帮我这个好吗?
由于提前, 阿肖克
我有2个netCDF文件(每个.nc文件有4个变量:敏感,感染,恢复和居住,每个变量的尺寸为64 x 88)。我想将这两个文件合并到一个单独的netCDF文件中,这样合并的文件将分别堆叠。从2个文件中感受敏感,从2个文件中感染,从2个文件中恢复,并从2个文件中居住。合并NetCDF文件在R
谁能帮我这个好吗?
由于提前, 阿肖克
的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')
}
你是什么意思与“分开堆叠”? – Bart
新变量的尺寸应该是“(64,176)”还是“(128,88)”? – JanLauGe
“分开堆叠”我的意思是把数组放在另一个之上。例如,对于时间0001而言,从文件1易受影响,对于时间为0001的易感文件和用于时间0002的易感文件。有一个名为Panoply的免费工具,让您创建一个动画,如果netcdf文件具有变量的时间上下文(在我的情况下为敏感,感染,恢复)。 –