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

如何基于文件名前缀自动批量堆叠文件夹中的栅格数据

解决方案

问题分析

原代码存在几处关键问题:

  • 误用char(files_base),正确获取字符串长度的函数是nchar()
  • group_by仅完成分组标记,未对每组文件执行实际处理
  • list.files的pattern参数传入向量会导致匹配逻辑混乱,无法精准筛选每组文件

修正后的实现步骤(基于terra包,栅格处理效率更高)

  1. 加载所需工具包
library(terra)
library(dplyr)
  1. 获取所有栅格文件的完整路径
dir_years_raster <- file.path(dir_years, "raster")
all_files <- list.files(path = dir_years_raster, pattern = "\\.tif$", full.names = TRUE)
  1. 提取每个文件的分组前缀(匹配末尾_YYYY.tif格式,剥离年份和后缀保留核心前缀)
file_df <- data.frame(file_path = all_files) %>%
  mutate(
    file_name = basename(file_path),
    group_prefix = sub("_[0-9]{4}\\.tif$", "", file_name)
  )
  1. 按前缀分组,自动堆叠每组内的栅格文件
stacked_rasters <- file_df %>%
  group_by(group_prefix) %>%
  group_map(function(group_data, group_name) {
    # 堆叠当前组的所有栅格
    rast_stack <- rast(group_data$file_path)
    # 给堆叠后的栅格命名,便于识别各年份图层
    names(rast_stack) <- sub("\\.tif$", "", basename(group_data$file_path))
    # 返回分组名称和对应堆叠结果
    list(prefix = group_name, raster_stack = rast_stack)
  })

额外说明

  • stacked_rasters是一个列表,每个元素包含对应前缀的分组名称和堆叠完成的栅格对象
  • 如果需要直接保存堆叠后的栅格文件,可在group_map中添加写入语句:
writeRaster(rast_stack, file.path(dir_years_raster, paste0(group_name, "_stacked.tif")), overwrite = TRUE)

原代码错误修正点

  • 替换char(files_base)为nchar(files_base)
  • 分组后需用group_map/group_split执行组内操作,而非直接转为列表
  • list.files的pattern需针对单个分组前缀设置,通过循环或分组函数批量处理

内容的提问来源于stack exchange,提问作者Micheal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:15:40