来自 netCDF 文件的堆栈变量

问题描述

我正在处理多个 netCDF 文件。每个 nc 文件有 33 个变量。我需要用这 33 个变量为每个 nc 文件创建一个堆栈来做一些计算,但我知道的唯一方法是在一个评估器中转换每个变量并将它们一个一个地堆叠......像这样:

library(raster)
library(ncdf4)
library(rgdal)

nc_data <- nc_open('./data/GCAM/RAW/93d4aa096b15491b1ba136b46d8063cdca59d253c75d59791b4d4cb6f8a1ae91/Project ID 68344/GCAM-Demeter/GCAM-Harmonized/Mean_Std/GCAM_Demeter_LU_H_ssp1_rcp26_modelmean_2030.nc')

PTF0 <- nc_data$var[[1]]
data1 <- ncvar_get( nc_data,PTF0 ) 

data1 <- raster(data1)

plot(data1)

任何人都可以帮助自动化吗??我提前致谢

This is a structure of the NetCDF file,I highlight the files that I need to stack,actually,I need stack just PT1 to PTF8

解决方法

你现在正在做的事情可以像这样完成

f <- 'GCAM_Demeter_LU_H_ssp1_rcp26_modelmean_2030.nc'

library(raster)
r <- raster(f,"PTF0") 

(假设“PTF0”是一个变量名)

但如果您想一步为多个变量创建单个对象,请改用 terra

library(terra)
r <- rast(f) 

你可以指定你想要的变量

 rr <- rast(f,c("PFT1","PTF2"))

你也可以创建一个 SpatRasterDataSet 然后像这样提取你想要的变量

s <-sds(f)
x <- rast(s[2:8])
,

谢谢罗伯特先生!用这几行,我解决了问题,我可以做我需要的一切。

library(raster)
library(ncdf4)
library(rgdal)
library(terra)

f <- nc_open('./data/GCAM/RAW/93d4aa096b15491b1ba136b46d8063cdca59d253c75d59791b4d4cb6f8a1ae91/Project ID 68344/GCAM-Demeter/GCAM-Harmonized/Mean_Std/GCAM_Demeter_LU_H_ssp1_rcp26_modelmean_2030.nc')

rr <- rast(f$filename)

rrr <- rr[[2:8]]

plot(rrr)

soma <- sum(rrr)

plot(soma)

现在我将花更多的时间考虑如何自动执行此操作...因为我需要为每个 NetCDF 文件执行此操作...