R语言 从NC文件中循环提取温度数据

2uluyalo  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(211)

我希望从R.d中的.nc文件中提取一些气候数据我已经设法使我的代码运行从单个文件中提取数据,但我有许多不同的.nc文件,我想从中提取一个特定纬度和经度点的整个时间序列数据。
我的.nc文件具有全球每日温度分辨率,因此每个.nc文件代表我10年研究期间的一天。所有文件的名称都相同,但日期每天不同,例如,gloaltemp_20000101.nc、globaltemp_20000102.nc等。
我想从一个单独的生物观测数据集中提取特定纬度和经度点的温度数据,所以理想情况下,我想从具有全局分辨率(5 km x 5 km)的NC文件中获得每个生物观测(特定纬度和经度)的所有温度数据的时间序列。我假设在这里我需要从我的特定点到最近的网格中心进行一些插值(有点丢失)。
我想这将使我的生活更容易提取数据使用一个循环,但我有点卡住,这是代码提取数据的一个单一的数控文件。

folder <-"D:/TMP"
files <- list.files(folder, full.names = TRUE, recursive = TRUE)

our_nc_data <- nc_open("2000/globaltemp_20000101")
print(our_nc_data)
attributes(our_nc_data$var)
attributes(our_nc_data$dim)
lat <- ncvar_get(our_nc_data, "lat")
lon <- ncvar_get(our_nc_data, "lon")

print(c(nlon, nlat))

time <- ncvar_get(our_nc_data, "time")
tunits <- ncatt_get(our_nc_data, "time", "units") 

gb_array <- ncvar_get(our_nc_data, "temperature")
fillvalue <- ncatt_get(our_nc_data, "temperature", "_FillValue")
dim(lswt_array)
gb_array[gb_array==fillvalue$value] <- NA
gb_array

tunits

time_obs <- as.POSIXct(time, origin = "1981/01/01", tz="GMT")
dim(time_obs)
range(time_obs)
dim(gb_array)
print (gb_array)

lonlattime <- as.matrix(expand.grid(lon,lat,time_obs)) 

gb_vec_long <- as.vector(gb_array)
length(gb_vec_long) 

#Create data.frame

gb_obs <- data.frame(cbind(lonlattime, lswt_vec_long))

任何帮助将不胜感激!
谢谢。

ryevplcw

ryevplcw1#

542goweast的建议可以这样实现:

folder <-"D:/TMP"
files <- list.files(folder, full.names = TRUE, recursive = TRUE)

read_my_files = function(current_file) {
    our_nc_data <- nc_open(current_file)

    ## do the reading and processing

    ## return the data frame for the current file
    data.frame(cbind(lonlattime, lswt_vec_long))
}

## this will give you a list of data frames, each containing data for
## one input file
all_data = lapply(files, read_my_files)

相关问题