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