在 R 中重新分类具有多个范围的栅格

Reclassify raster with multiple ranges in R

我有一个栅格,我想将其值重新分类为四个值(NA、1、2 和 3)。

我使用了 raster 包中的 reclassify 命令。在此命令中,可以指示包含必须重新分类的间隔的数组。但在我看来 reclassify 只接受 3x3 数组,所以我不能重新分类超过 3 个范围。

我试图在 reclassify 命令中将包含我所有范围的数组 m 分配给 rcl,但它只考虑前 3 行,因此其他行数组被命令忽略。

m 数组的工作方式如下:

第一列代表较低的值范围,第二列代表较高的值范围,第三列代表分配给该单元格的新值。例如,在第 1 行 0,0,NA 行中,我希望所有等于零的值都转换为 NA。第2行1,5,1,我要将1到5之间的所有值都转换为值1。第7行16,19,3例如,16到19之间的值应该转换为值等于到 3,依此类推。

我不知道这个转换有什么问题。我会接受带有 raster 包或其他包的解决方案吗?

举个例子

#raster
r <- raster(matrix(runif(100, 0, 50), ncol=10))
plot(r)

#matrix with rules reclass
m<-matrix(c(0,0,NA,
            1,5,1,
            6,8,3,
            9,9,2,
            10,13,1,
            14,15,2,
            16,19,3,
            20,20,2,
            21,23,3,
            24,24,3,
            25,25,3,
            26,32,3,
            33,33,3,
            34,38,3,
            39,39,2,
            40,40,3,
            41,41,2,
            42,Inf,3), ncol=3, byrow=TRUE)

#r2 with reclass
r2<-raster::reclassify(x=r, rcl=m)

如果重分类矩阵中没有间隙,效果会更好

#matrix with rules reclass
m<-matrix(c(0,1,NA,
            1,6,1,
            6,8,3,
            8,9,2,
            9,13,1,
            13,15,2,
            15,19,3,
            19,20,2,
            20,23,3,
            23,24,3,
            24,25,3,
            25,32,3,
            32,33,3,
            33,38,3,
            38,39,2,
            39,40,3,
            40,41,2,
            41,Inf,3), ncol=3, byrow=TRUE)

#r2 with reclass
r2<-raster::reclassify(x=r, rcl=m, include.lowest=TRUE)

这必须像十进制数那样完成。对于整数,可以允许以您想要的方式指定它,其中间隔在两侧都是开放的,并且 fromto 可以是相同的值,但目前不是案.