基于两个等时序列raster::stack的逐像素条件选值问题求助
解决raster::stack逐像素取较大值的问题
你直接用RS1[]提取的是栅格的向量形式,会丢失原stack的空间投影、分辨率、图层结构等核心属性,所以得到的只是一堆离散数值,没法直接作为栅格stack使用。下面给你两种靠谱的实现方式:
方法1:用raster::calc()自定义规则
calc()是raster包专门用于对栅格(或stack)逐像素执行自定义运算的函数,完全适配你的需求:
# 定义逐像素判断函数 get_larger <- function(x) { ifelse(x[1] > x[2], x[1], x[2]) } # 合并两个stack并执行运算,得到保留空间属性的新stack RS3 <- calc(stack(RS1, RS2), fun = get_larger)
这里把RS1和RS2合并为一个临时stack后,get_larger()会对每个像素的对应图层值(RS1的该像素值、RS2的该像素值)执行判断,返回符合规则的数值,同时完整保留原栅格的所有空间属性。
方法2:直接用max()函数(更简洁)
你的需求本质就是逐像素取两个stack对应位置的最大值,因此可以直接用raster包支持的向量化运算:
RS3 <- max(RS1, RS2)
这个方法代码更简洁,底层已经封装了逐像素的判断逻辑,结果和方法1完全一致。
验证结果的话,可以用plot(RS3)可视化,或者用RS3[1:10]提取前10个像素值,确认是否符合规则。
内容的提问来源于stack exchange,提问作者Martín Francia
相关产品推荐
相关产品推荐

