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

如何在terra中基于图层前缀自动分离栅格栈的分组图层?

基于图层名称前缀自动拆分terra栅格栈

你可以通过分组索引+批量提取的方式实现自动拆分,思路和terra::tapp()的分组逻辑一致,无需手动逐个识别分组。以下是具体实现方法:

核心解决方案

利用split()按分组索引拆分图层名称/位置,再通过lapply()批量提取对应栅格栈:

library(terra)

# 你的示例数据
s1 <- rast(nrow=4, ncol=3, nlyrs=5)
values(s1) <- runif(ncell(s1) * dim(s1)[3])
names(s1) <- c('m1', 'm2', 'm3', 'm4', 'm5')

s2 <- rast(nrow=4, ncol=3, nlyrs=5)
values(s2) <- runif(ncell(s2) * dim(s2)[3])
names(s2) <- c('n1', 'n2', 'n3', 'n4', 'n5')

s <- c(s1, s2)

# 1. 生成分组索引(提取图层名称前缀)
lyr_names <- names(s)
idx <- substr(lyr_names, 1, 1)  # 这里提取第一个字符作为分组标识

# 2. 按索引拆分图层名称
grouped_names <- split(lyr_names, idx)

# 3. 批量提取每个分组的栅格栈
split_rasts <- lapply(grouped_names, function(nms) subset(s, nms))

结果验证

拆分后的栅格栈存储在列表split_rasts中,可通过名称直接调用:

# 查看m前缀的栅格栈
split_rasts$m
# 查看n前缀的栅格栈
split_rasts$n

灵活调整分组规则

如果你的前缀不是第一个字符(比如前缀是temp_/prec_这类模式),只需修改索引生成逻辑即可:

# 示例:提取下划线前的字符串作为分组标识(适用于"temp_2020"这类命名)
idx <- sub("_.*", "", lyr_names)

另一种实现:按位置提取

也可以通过分组后的图层位置来提取,结果完全一致:

group_positions <- split(seq_along(s), idx)
split_rasts <- lapply(group_positions, function(pos) subset(s, pos))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:28:10