You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用正则表达式按唯一标识批量堆叠文件夹中的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:58:37