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编码器。
谢谢。
您可以使用%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)
| 归档时间: |
|
| 查看次数: |
3449 次 |
| 最近记录: |