繁体   English   中英

在R中雄辩地更改许多栅格单元格值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM