雄辩地更改R中的许多栅格像元值

vit*_*232 3 gis r raster spatial

我有一个Landfire现有植被数据集(http://www.landfire.gov/),已经将其投影并裁剪到了我的研究站点。栅格具有约12,000,000个像元。像元值代表特定的植被类型,值的范围为16:2200。所有这些值均未在我的研究范围内表示(即,值从20跳到1087)。

由于出于我的目的,许多像素的值可以归为一类(例如,将不同的灌木丛划分为一类),因此我想将栅格的值重置为更简单的值(1:11)。这将有助于根据植被类型轻松地从其他栅格中提取数据,并易于绘制分类图。我有一个有效的代码,但需要大量输入才能更改我需要更改的所有61个值。这是我所做的:

#===============================
############Example#############
#===============================

library(raster)
r <- raster(nrows=30, ncols=10, xmn=0, xmx=10)
r[] <- rep(10:19, 30)

r.omance <- function(x){
            x[x==10] <- 1; x[x==11] <- 1; x[x==12] <- 1
            x[x==13] <- 1; x[x==14] <- 1; x[x==15] <- 1

            x[x==16] <- 2; x[x==17] <- 2; x[x==18] <- 2
            x[x==19] <- 2
            return(x)}

reclass <- calc(r, fun = r.omance) 
Run Code Online (Sandbox Code Playgroud)

有谁知道解决这个问题的更简单方法?您可以想象键入会更改61个值,尤其是因为x [x == 16:20] <-1会产生错误,因此每个值都必须分别键入。如我所说,我的代码有效。但是我只是想成为一个更好的R编码器。

谢谢。

Pau*_*tra 5

您可以使用%in%

x %in% c(1,4,3:10)
Run Code Online (Sandbox Code Playgroud)

这个:

x[x==10] <- 1; x[x==11] <- 1; x[x==12] <- 1
x[x==13] <- 1; x[x==14] <- 1; x[x==15] <- 1
Run Code Online (Sandbox Code Playgroud)

将减少为:

x[x %in% 10:15]
Run Code Online (Sandbox Code Playgroud)