我正在尝试打开和读取多个NetCDF文件,并且要将结果保存到许多数据帧的一个列表中。 在我的工作目录中,我的文件夹“ main_folder”包含五个文件夹(x1,x2,x3,x4和x5),这五个文件夹中的每个文件夹都包含不同数量的子文件夹,例如,假设文件夹x1包含以下子文件夹文件夹“ y1”,到“ y20”。文件夹y1包含n1个NetCDF文件。文件夹y2包含n2个NetCDF文件,依此类推。类似地,其他文件夹x2,x3,x4,x5。 我想从文件夹x1中打开,读取所有NetCDF文件中的变量并获取它们,并将它们作为一个数据帧df1。 从文件夹x2,我要创建第二个数据帧df2,依此类推。 最后,我将有五个与每个文件夹内容相对应的数据帧。然后我要列出这五个数据帧的列表。
我写了一个代码,它起作用了,除了一个问题,该问题是列表中的第二个数据帧包含df1的数据并附加了第二个文件df2的数据。 df5包含df1 + df2 + df3 + df4 + df5的数据。 我怎么解决这个问题。 这是我的代码
setwd("E:/main_folder")
#1# list all files in the main_folder
folders<- as.list(list.files("E:/main_folder"))
#2# make list of subfiles
subfiles<- lapply(folders,function(x) as.list(list.files(paste("E:/main_folder",x,sep="/"))))
#3# list the netcdf files from each subfiles
files1<- lapply(subfiles[[1]],function(x) list.files(paste( folders[1],sep = "/"),pattern='*.nc',full.names=TRUE))
files2<- lapply(subfiles[[2]],function(x) list.files(paste( folders[2],full.names=TRUE))
files3<- lapply(subfiles[[3]],function(x) list.files(paste( folders[3],full.names=TRUE))
files4<- lapply(subfiles[[4]],function(x) list.files(paste( folders[4],full.names=TRUE))
files5<- lapply(subfiles[[5]],function(x) list.files(paste( folders[5],full.names=TRUE))
#4# join all files in one list
filelist<- list(files1,files2,files3,files4,files5)
#5# Read the NetCDF and get the desired variables
df<- data.frame()
MissionsData<- list()
for (i in seq_along(filelist)){
n<- length(filelist[[i]])
for (j in 1:n){
for( m in 1:length( filelist[[i]][[j]])){
nc<- nc_open(filelist[[i]][[j]][[m]])
lat<- ncvar_get(nc,"glat.00")
lon<- ncvar_get(nc,"glon.00")
ssh<- ncvar_get(nc,"ssh.53")
jdn<- ncvar_get(nc,"jday.00")
df<- rbind(df,data.frame(lat,lon,ssh,jdn))
nc_close(nc)
}
}
MissionsData[[i]]<- df
}
此外,我可以一口气执行第3步,而不必手动输入吗?