如何在R语言terra包freq函数的输出中添加图层名称替换图层编号
解决方案
你可以直接利用terra栅格对象的图层名称和freq输出中layer编号的一一对应关系(layer编号从1开始,和names()返回的图层名向量索引完全匹配)完成替换,两种常用实现方式如下:
方法1:基础R实现
# 将freq返回的矩阵转为数据框便于修改 f_df <- as.data.frame(f) # 直接用layer编号做索引匹配图层名,可选择新增列或直接替换原layer列 # 新增图层名列 f_df$layer_name <- names(rc1)[f_df$layer] # 若要直接替换原layer列,执行以下代码即可 # f_df$layer <- names(rc1)[f_df$layer]
处理后输出结构示例:
| layer | value | count | layer_name |
|---|---|---|---|
| 1 | 1 | 5 | a |
| 1 | 2 | 24 | a |
| 2 | 1 | 9 | b |
| 3 | 4 | 40 | c |
方法2:tidyverse风格实现
如果你习惯用dplyr处理数据,可以用mutate完成批量替换:
library(dplyr) f_df <- as.data.frame(f) %>% # 直接替换原layer列为图层名 mutate(layer = names(rc1)[layer])
内容的提问来源于stack exchange,提问作者UseR10085
相关产品推荐
相关产品推荐

