使用rasterFromXYZ基于数据框因子列创建栅格失败问题咨询
问题原因
rasterFromXYZ()传入因子列时会自动将因子转换为整数存储,但不会同步绑定因子的水平映射关系,后续直接给栅格赋值因子向量也不会自动更新栅格的属性表,因此分类属性无法被识别- 若你近期更新过raster/terra包,部分新版本对因子栅格的创建逻辑有调整,旧的直接赋值写法会失效,需要显式设置栅格的分类属性表
解决方案(raster包)
# 1. 生成因子编码与水平的映射关系 tabf$class <- factor(tabf$class) class_levels <- levels(tabf$class) # 新增整数编码列用于生成栅格 tabf$class_code <- as.integer(tabf$class) # 2. 基于整数编码生成栅格 kopen <- rasterFromXYZ(cbind(tabf[,1:2], tabf[,"class_code"])) # 3. 显式给栅格绑定因子水平 levels(kopen) <- data.frame(ID = seq_along(class_levels), class = class_levels)
更简便的terra包实现(推荐替代raster包)
library(terra) tabf$class <- factor(tabf$class) # 直接读取xyz数据生成分类栅格,自动保留因子属性 kopen <- rast(tabf[, c("x", "y", "class")], type = "xyz")
结果验证
运行levels(kopen)可查看栅格绑定的分类水平,运行plot(kopen)可直接生成带类别标签的分类栅格图。
内容的提问来源于stack exchange,提问作者Alex.V
相关产品推荐
相关产品推荐

