[英]Eloquently change many raster cell values in R
我有一个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] < - 1产生错误,所以每个值都必须单独输入。 正如我所说,我的代码有效。 但我只是想成为一个更好的R编码器。
谢谢。
您可以使用%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]
您将使用&
logical运算符节省一些输入,例如
x[ x >= 10 & x <= 15 ] <- 1
x[ x >= 16 & x <= 19 ] <- 2
我会使用重分类功能
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.