我有一个栅格数据,我已经分为3类。然后我想添加值到每个类。我使用以下代码
library(terra)
f <- system.file("ex/elev.tif", package="terra")
r <- rast(f)
# classify the values into three groups
m <- c(min(global(r, "min", na.rm=TRUE)), 275, 1,
275, 410, 2,
410, max(global(r, "max", na.rm=TRUE)), 3)
#Reclassify the raster stack
rclmat <- matrix(m, ncol=3, byrow=TRUE)
rc <- classify(r, rclmat, include.lowest=TRUE)
plot(rc)
#Add some values to raster attribute table
rc$code <- c(0.002, 0.0056, 0.0124)
#Generate raster using the new column
y <- as.numeric(rc, 2)
plot(y)
如你所见,第二个情节很奇怪,我该怎么纠正它?
2条答案
按热度按时间syqv5f0l1#
您的示例数据
要分配属性,必须使用
levels(x)<-
(请参见?levels
)。您使用$<-
,但这会创建一个新层。如果您现在想将“代码”值放入单元格中,可以继续执行
(it应该是1而不是2,因为您只有一个类别。)
你也可以用
但是如果这是你想要的输出,你应该在
classify
中使用这些值,这样你就可以一步完成。请注意,您可以进一步简化对
classify
的 * 原始 *(不是上面的那个)调用:deyfvvtc2#
问题似乎是属性表中的类与栅格中的值范围不匹配(添加新值后)。我们可以通过首先使用
classInt
包中的classIntervals()
函数计算连续数值变量的类间隔,然后为每个类赋值来保持匹配。下面是一个扩展来展示我们如何调整
brks[]
: