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

在terra中如何将栅格值替换为属性表的指定分类值

解决方法

你的问题出在classify和subst的参数设置错误——你指定的替换目标值(0-2)并不是原栅格的实际值(原栅格值是1-9),自然不会生效。以下是几种正确的实现方式:

方法一:直接通过属性表映射替换值

利用match函数将原栅格值与属性表中的id匹配,提取对应的y值赋值给新栅格,最后移除属性层级:

library(terra)

# 你的原始代码
r <- rast(nrows=3, ncols=3)
values(r) <- 1:9
y_table <- data.frame(id=1:9, y=c(0,0,1,0,1,1,2,2,2))
levels(r) <- y_table

# 生成简化栅格
r_simplified <- r
# 匹配原栅格值到id,提取对应y值
values(r_simplified) <- y_table$y[match(values(r), y_table$id)]
# 移除属性表层级
levels(r_simplified) <- NULL

方法二:使用classify函数(正确配置rcl矩阵)

构建包含原栅格值-目标替换值对应关系的分类矩阵(rcl),再传入classify:

# 构建正确的分类规则矩阵:第一列原id,第二列目标y值
rcl_matrix <- as.matrix(y_table)
r_simplified <- classify(r, rcl = rcl_matrix)
# 移除属性层级
levels(r_simplified) <- NULL

方法三:使用subst函数(正确传入新旧值向量)

subst需要明确传入原栅格的旧值向量和对应的新值向量:

r_simplified <- subst(r, from = y_table$id, to = y_table$y)
# 移除属性层级
levels(r_simplified) <- NULL

验证结果:运行values(r_simplified)会得到c(0,0,1,0,1,1,2,2,2),符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:42:52