在 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)
这必须像十进制数那样完成。对于整数,可以允许以您想要的方式指定它,其中间隔在两侧都是开放的,并且 from
和 to
可以是相同的值,但目前不是案.
我有一个栅格,我想将其值重新分类为四个值(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)
这必须像十进制数那样完成。对于整数,可以允许以您想要的方式指定它,其中间隔在两侧都是开放的,并且 from
和 to
可以是相同的值,但目前不是案.