我正在尝试处理从同一文件路径中的多个.grb2文件提取一个子集,并将其写入csv的问题。我可以通过使用以下命令来完成一个(或几个)操作:
GRIB <- brick("tmp2m.1989102800.time.grb2")
GRIB <- as.array(GRIB)
readGDAL("tmp2m.1989102800.time.grb2")
tmp2m.6hr <- GRIB[51,27,c(261:1232)]
str(tmp2m.6hr)
tmp2m.data <- data.frame(tmp2m.6hr)
write.csv(tmp2m.data,"tmp1.csv")
以上命令以csv格式提取特定纬度“ 51”和经度“ 27”以及特定时间范围“ c(261:1232)”的温度值。
现在,我在同一目录中有数百个这些文件(当然,它们具有不同的文件名),并且我想对所有文件都做同样的事情。如您所知,比我更好,我不能一一对应地更改文件名。
我为此付出了很多努力,但是到目前为止,我还没有做到。由于我是R语言的新手,并且我的知识有限,因此,我将不胜感激。
答案 0 :(得分:0)
最简单的方法是使用普通的for循环:
path <- "your file path here"
input.file.names <- dir(path, pattern =".grb2")
output.file.names <- paste0(tools::file_path_sans_ext(file.names),".csv")
for(i in 1:length(file.names)){
GRIB <- brick(input.file.names[i])
GRIB <- as.array(GRIB)
readGDAL(input.file.names[i]) # edited line
tmp2m.6hr <- GRIB[51,27,c(261:1232)]
str(tmp2m.6hr)
tmp2m.data <- data.frame(tmp2m.6hr)
write.csv(tmp2m.data,output.file.names[i])
}
您当然可以将for循环的主体创建为一个函数,然后使用purrr中的标准lapply
或map
函数。
请注意,此代码将打印出不同的CSV文件。如果要将数据附加到单个文件,则应签出write.table