使用正则表达式按唯一标识批量堆叠文件夹中的Raster文件
批量堆叠Raster文件(按日期/传感器/位置分组)
我需要将文件夹中大量Raster文件按唯一日期/传感器/位置分组,堆叠所有包含“Rrs”标识的对应波段文件。已经通过以下代码提取出了唯一文件名前缀:
all_files <- list.files("D:/ACOLITE_Output") unique_files <- all_files %>% str_extract('^(.*?).Rrs') %>% na.omit() %>% unique()
修正后的批量堆叠实现代码
下面是可以直接运行的完整代码,基于terra包实现高效的批量堆叠与导出:
library(dplyr) library(stringr) library(terra) # 读取文件夹内所有文件(带完整路径,避免读取失败) all_files <- list.files("D:/ACOLITE_Output", full.names = TRUE) # 提取唯一的文件名前缀 unique_prefixes <- all_files %>% str_extract('^(.*?).Rrs') %>% na.omit() %>% unique() # 自动创建输出文件夹(如果不存在) dir.create("D:/Stacked_Output/", recursive = TRUE, showWarnings = FALSE) # 遍历每个前缀,批量生成Stack并导出 for (prefix in unique_prefixes) { # 筛选当前前缀对应的所有Raster文件 target_files <- grep(prefix, all_files, value = TRUE) # 直接读取多个文件生成Raster Stack(terra::rast支持批量输入) raster_stack <- terra::rast(target_files) # 拼接输出路径,使用前缀作为文件名,保存为tif格式 output_path <- paste0("D:/Stacked_Output/", prefix, ".tif") # 导出Stack,允许覆盖已存在的文件 terra::writeRaster(raster_stack, output_path, overwrite = TRUE) }
关键说明
- 完整路径读取:使用
list.files(..., full.names = TRUE)获取文件完整路径,避免terra因找不到文件报错 - 高效创建Stack:
terra::rast()支持直接传入多个文件路径,自动生成Stack,比逐个合并更高效 - 自动创建文件夹:添加
dir.create()确保输出目录存在,无需手动创建 - 灵活导出:输出格式默认用tif,可根据需求调整
writeRaster的format参数(如format="ENVI")
内容的提问来源于stack exchange,提问作者Richard Johansen
相关产品推荐
相关产品推荐

