我有一个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)
有谁知道更简单的方法吗?您可以想象输入更改61值,特别是因为x [x == 16:20]&lt; - 1产生错误,所以每个值都必须单独输入。正如我所说,我的代码有效。但我只想成为一名更好的R编码员。
感谢。
答案 0 :(得分:4)
您可以使用%in%
:
x %in% c(1,4,3:10)
此:
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 %in% 10:15]
答案 1 :(得分:3)
使用&
逻辑运算符(例如
x[ x >= 10 & x <= 15 ] <- 1
x[ x >= 16 & x <= 19 ] <- 2
答案 2 :(得分:3)
我会使用重新分类功能
library(raster)
r <- raster(nrows=30, ncols=10, xmn=0, xmx=10)
r[] <- rep(10:19, 30)
rc <- matrix(c(10,15,1,16,19,2), ncol=3, byrow=TRUE)
x <- reclassify(r, rc, right=NA)