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

在R中基于CSV文件名读取栅路子集并导出至目标文件夹

解决方案:基于CSV筛选TIFF栅格并计算物种丰富度

针对你需要从大量TIFF栅格中筛选CSV指定物种、导出子集并制作丰富度图的需求,以下是基于R语言的高效实现方案(适配4000+文件的大数据场景):

步骤1:环境准备与路径设置

先加载处理栅格和文件的工具包,设置好文件夹路径:

# 加载依赖包(未安装先运行 install.packages(c("terra", "fs")) )
library(terra)
library(fs)

# 替换为你的实际路径
tiff_source_dir <- "/path/to/your/tiff/folder"
tiff_target_dir <- "/path/to/output/subset/folder"
csv_file_path <- "/path/to/your/species_list.csv"

# 创建输出文件夹(不存在则自动生成)
dir_create(tiff_target_dir)

步骤2:读取CSV并匹配文件名

读取CSV中的物种名,生成对应的TIFF文件名,再与文件夹中的实际文件匹配:

# 读取CSV数据
species_list <- read.csv(csv_file_path)

# 生成对应的TIFF文件名(匹配你的文件命名规则)
species_list$tiff_name <- paste0(species_list$BINOMIAL, ".tif")

# 获取源文件夹中所有TIFF文件
all_tiff_files <- dir_ls(tiff_source_dir, regexp = "\\.tif$") %>% basename()

# 筛选出CSV中存在的TIFF文件
selected_tiffs <- intersect(species_list$tiff_name, all_tiff_files)

# 提示未匹配到的物种(可选)
missing_species <- setdiff(species_list$tiff_name, all_tiff_files)
if(length(missing_species) > 0){
  cat("未找到对应TIFF文件的物种:\n", paste(missing_species, collapse = "\n "))
}

步骤3:导出筛选后的栅格子集

将匹配到的TIFF文件复制到目标文件夹:

# 批量复制文件
file_copy(path(tiff_source_dir, selected_tiffs), tiff_target_dir, overwrite = TRUE)

步骤4:读取栅格并计算物种丰富度

使用terra包高效读取栅格栈,计算每个像元的物种数量:

# 读取筛选后的栅格栈
raster_stack <- rast(path(tiff_target_dir, selected_tiffs))

# 计算物种丰富度(假设栅格为二进制:1=物种存在,NA/0=不存在)
species_richness <- sum(raster_stack, na.rm = TRUE)

# 保存丰富度栅格
writeRaster(species_richness, path(tiff_target_dir, "species_richness.tif"), overwrite = TRUE)

# 快速可视化丰富度图
plot(species_richness, main = "物种丰富度分布图")

注意事项

  • 确保所有TIFF栅格的投影、分辨率、范围完全一致,否则栅格栈会创建失败;
  • 若你的物种栅格不是二进制(比如存在其他数值),需先转换为存在/缺失标记:raster_stack[raster_stack > 0] <- 1;
  • terra包相比传统的raster包处理大数据效率更高,适合4000+文件的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:59:16