我在R区用土处理环境层.我想修改落入多边形内的栅格的值.我知道classify函数可以更新栅格的所有值,但我不知道如何仅将其应用于多边形的区域.我还发现a nice and neat way可以改变多边形内的所有值,如下所示:

myraster[mypolygon] <- 7

但我只需要更新一个特定的值,而不是所有的,例如,将所有包含值21的单元格更改为值7.

我try 过,但没有成功:

myraster[mypoligon][myraster[mypoligon] == 21] <- 7

得到消息:

错误:[`[`]值太长

作为替代方案,我正在考虑获得与多边形相交的栅格,然后对值进行分类,并将这个小栅格与原始栅格合并,但我想知道是否存在更快的过程.

PS.我在下面贴了一个可复制的例子作为答案.

推荐答案

这里有一种使用cover到达那里的方法.

示例数据

library(terra)
p <- vect(system.file("ex/lux.shp", package="terra"))[3,]
r <- rast(system.file("ex/elev.tif", package="terra"))

让我们将p覆盖的区域r更新为400,但仅当该区域的值为400时.>

x <- mask(r, p)
y <- clamp(x, -Inf, 400)
z <- cover(y, r)

如果你想把一个特定的值,比如482,改成1000,你可以

yy <- classify(x, cbind(482, 1000))
zz <- cover(yy, r)

以及一系列的价值观

yyy <- classify(x, cbind(480, 500, 1000))
zzz <- cover(yyy, r)

R相关问答推荐

R中的枢轴/转置

跨列应用多个摘要函数:summerise_all:列表对象无法强制为double类型'

R的GG平行坐标图中的排序变量

从R中的另一个包扩展S3类的正确方法是什么

如何使用rmarkdown和kableExtra删除包含折叠行的表的第一列的名称

查找图下的面积

如何优化向量的以下条件赋值?

从BRM预测价值

如何删除仅在数据集顶部和底部包含零的行

使用Scale_*_MANUAL时在图例中保留未使用的系数级别

过滤名称以特定字符串开头的文件

在多页PDF中以特定布局排列的绘图列表不起作用

将箭头绘制在图形外部,而不是图形内部

无法将条件case_when()应用于使用!!创建的新变量Mutations

将文本批注减少到gglot的y轴上的单个值

如何在GALT包的函数&geom_x样条线中调整线宽

有毒元素与表观遗传年龄的回归模型

附加中缀操作符

分隔日期格式为2020年7月1日

随机生成样本,同时在R内的随机样本中至少包含一次所有值