R语言基于字符值生成分类列失败,求解决方法
解决DataFrame球队组合字符串的分组标记问题
问题背景
- DataFrame的
full_name列存储两支球队的组合字符串,示例值:Man U to win Liverpool to winLiverpool to win Man U to winChelsea to win Arsenal to win
- 需求:将前两种组合标记为
North,第三种标记为South - 尝试修改因子水平的代码无报错,但DataFrame未产生预期变化
问题原因
你尝试修改levels的方式无效,核心原因是**full_name列大概率是字符型而非因子类型**,字符型列没有levels属性,因此修改levels不会作用于原数据。
解决方案
方案1:针对字符型列(最常见场景)
通过字符串匹配直接生成新的标记列,以下两种方法任选:
基础R实现
# 新增region列,根据字符串匹配标记分组 raw_data$region <- ifelse( # 同时包含Man U和Liverpool的组合标记为North grepl("Man U to win", raw_data$full_name) & grepl("Liverpool to win", raw_data$full_name), "North", # 同时包含Chelsea和Arsenal的组合标记为South ifelse(grepl("Chelsea to win", raw_data$full_name) & grepl("Arsenal to win", raw_data$full_name), "South", NA) # 其他未匹配情况标记为NA,可按需调整 )
dplyr包实现(更简洁的tidy风格)
library(dplyr) raw_data <- raw_data %>% mutate(region = case_when( grepl("Man U to win", full_name) & grepl("Liverpool to win", full_name) ~ "North", grepl("Chelsea to win", full_name) & grepl("Arsenal to win", full_name) ~ "South", TRUE ~ NA_character_ # 未匹配场景默认NA ))
方案2:若full_name为因子类型
如果该列确实是因子,可先转换为字符型再处理,或直接重新指定因子水平:
# 方法1:转字符型后用方案1处理 raw_data$full_name <- as.character(raw_data$full_name) # 方法2:直接重设因子水平与标签 raw_data$full_name <- factor( raw_data$full_name, levels = c("Man U to win Liverpool to win", "Liverpool to win Man U to win", "Chelsea to win Arsenal to win"), labels = c("North", "North", "South") )
内容的提问来源于stack exchange,提问作者abc_95
相关产品推荐
相关产品推荐

