在R中将字符型站点数据按规则分组编码为数值型
站点编码解决方案
Base R 实现方法
- 先创建命名映射向量,把每个站点对应到目标编码:
# 替换占位符为实际站点名称 site_map <- c( "NDUFR" = 1, "UMNP-HQ" = 2, "UMNP-campsite3" = 3, "UMNP-hondohondoa" = 4, "站点4_2" = 4, # 第4组第2个站点 "站点4_3" = 4, # 第4组第3个站点 "站点4_4" = 4, # 第4组第4个站点 "站点4_5" = 4, # 第4组第5个站点 "MamaGoti" = 5, "UMNP-Sanje1" = 6, "站点6_2" = 6, # 第6组第2个站点 "站点6_3" = 6, # 第6组第3个站点 "Magombera1" = 7, "站点7_2" = 7, # 第7组第2个站点 "Sonjo" = 8, "SonjoRoad" = 8 )
- 直接通过向量索引完成编码,同时保留sf对象的空间属性:
# 新增site_code列 sf_data$site_code <- site_map[sf_data$forestsite] # 可选:为未匹配的站点设置默认值(比如0) sf_data$site_code <- ifelse(is.na(sf_data$site_code), 0, sf_data$site_code)
dplyr 实现方法
使用case_when()函数处理多条件分组,直观展示编码规则:
library(dplyr) sf_data <- sf_data %>% mutate(site_code = case_when( forestsite == "NDUFR" ~ 1, forestsite == "UMNP-HQ" ~ 2, forestsite == "UMNP-campsite3" ~ 3, # 第4组:替换为实际5个站点名称 forestsite %in% c("UMNP-hondohondoa", "站点4_2", "站点4_3", "站点4_4", "站点4_5") ~ 4, forestsite == "MamaGoti" ~ 5, # 第6组:替换为实际3个站点名称 forestsite %in% c("UMNP-Sanje1", "站点6_2", "站点6_3") ~ 6, # 第7组:替换为实际2个站点名称 forestsite %in% c("Magombera1", "站点7_2") ~ 7, forestsite %in% c("Sonjo", "SonjoRoad") ~ 8, # 未匹配站点的默认值,可根据需求修改 TRUE ~ NA_real_ ))
注意事项
- 替换代码中的
站点4_2、站点6_2等占位符为你的实际站点名称,确保名称完全匹配(区分大小写)。 - sf对象在使用上述方法时,空间几何列
geometry会被自动保留,无需额外处理。 - 如果存在未在规则中的站点,可通过
NA_real_或指定数值(如0)设置默认编码。
内容的提问来源于stack exchange,提问作者Marnee Roundtree
相关产品推荐
相关产品推荐

