将 terra 中的栅格值简化为类别

问题描述 投票:0回答:1

我有一个包含许多唯一值和复杂属性表的大型栅格。我想创建一个更简单的栅格,它仅具有一个级别的值,该级别仅具有值 0-2。

假设我有一个栅格,但我真的只对变量感兴趣

y

library(terra)

r <- rast(nrows=3, ncols=3)
values(r) <- 1:9

y_table <- data.frame(id=1:9, y=c(0,0,1,0,1,1,2,2,2))
levels(r) <- y_table

有没有办法创建一个新的栅格来有效地替换值的

y
级别?所以而不是

levels(r)
  id y
1  1 0
2  2 0
3  3 1
4  4 0
5  5 1
6  6 1
7  7 2
8  8 2
9  9 2

values(r)
      y
 [1,] 1
 [2,] 2
 [3,] 3
 [4,] 4
 [5,] 5
 [6,] 6
 [7,] 7
 [8,] 8
 [9,] 9

我到了

levels(r_converted)
[1] ""

values(r_converted)
      lyr.1
 [1,]     0
 [2,]     0
 [3,]     1
 [4,]     0
 [5,]     1
 [6,]     1
 [7,]     2
 [8,]     2
 [9,]     2

我笨拙地尝试了

classify
subst

testc <- classify(r, rcl=matrix(c(0:2, 0:2), ncol=2), right=NA)
tests <- subst(r, 0:2, 0:2)

但两者都没有改变值本身。

r gis raster terra
1个回答
0
投票

使用 r 和 r2、y_table 和 y_table2,但认为这就是你想要的:

 r <- rast(nrows=3, ncols=3)
values(r) <- 1:9
y_table <- data.frame(id=1:9, y=c(0,0,1,0,1,1,2,2,2))

r2 = r
y_table2 <- data.frame(id=1:9, y=c(0,0,1,0,1,1,2,2,2))
y_table2$y <- as.factor(y_table2$y)
values(r2) = y_table2$y
r2
class       : SpatRaster 
dimensions  : 3, 3, 1  (nrow, ncol, nlyr)
resolution  : 120, 60  (x, y)
extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (CRS84) (OGC:CRS84) 
source(s)   : memory
categories  : label 
name        : lyr.1 
min value   :     0 
max value   :     2

is.factor(r2)
[1] TRUE
is.factor(r)
[1] FALSE
© www.soinside.com 2019 - 2024. All rights reserved.