使用属性而不是值分类`SpatRaster`Map

d4so4syb  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(111)

我想根据附加到栅格Map(SpatRaster)的属性表而不是像元值对栅格Map进行分类。
下面是terra::activeCat()函数的帮助下的一个reprex:

set.seed(0)
r <- rast(nrows=10, ncols=10)
values(r) <- sample(3, ncell(r), replace=TRUE) + 10
d <- data.frame(id=11:13, cover=c("forest", "water", "urban"), letters=letters[1:3], value=10:12)
levels(r) <- d
cats(r)

# [[1]]
# id  cover letters value
# 11 forest       a    10
# 12  water       b    11
# 13  urban       c    12

我想将urban类(cover == "urban")的单元格更改为NA

# this does not work
activeCat(r) <- 2
classify(r, cbind("urban", NA))
# this works but using the cell value
classify(r, cbind(13, NA))

谢谢

bq3bfh9z

bq3bfh9z1#

您可以使用subst
示例数据

library(terra)
set.seed(0)
r <- rast(nrows=10, ncols=10)
values(r) <- sample(3, ncell(r), replace=TRUE) + 10
d <- data.frame(id=11:13, cover=c("forest", "water", "urban"), letters=letters[1:3], value=10:12)
levels(r) <- d

解决方案

s <- subst(r, "urban", NA)

尽管将标签设置为NA有点奇怪。所以我会做这个

ss <- subst(r, 13, NA, raw=TRUE)

或与您显示的classify等效的。
对于更复杂的情况,可以删除类别,然后在以后重新设置它们

cts <- cats(r)
levels(r) <- NULL
# do something with r
# 
levels(r) = cts

相关问题