如何将多选项分类变量转换为数值变量?以BusinessTravel为例
多分类变量转数值变量的实现方法
针对你要把BusinessTravel变量(取值为"Non-Travel"、"Rarely_Travel"、"Frequently_Travel")转换为0、1、2的需求,这里提供几种适配你现有dplyr代码的实现方式:
方法1:用case_when明确映射(最直观)
这种方法可以清晰指定每个分类对应的数值,还能处理异常值:
new_df <- new_df %>% mutate(Attrition = ifelse(Attrition == "No", 0, 1), OverTime = ifelse(OverTime == "No", 0, 1), BusinessTravel = case_when( BusinessTravel == "Non-Travel" ~ 0, BusinessTravel == "Rarely_Travel" ~ 1, BusinessTravel == "Frequently_Travel" ~ 2, TRUE ~ NA_real_ # 对未匹配到的类别返回NA,避免出错 ))
方法2:因子转数值(适合有序分类)
先将变量转为有序因子,再转成数值,注意要指定levels的顺序(默认因子从1开始,所以减1得到0起始的数值):
new_df <- new_df %>% mutate(Attrition = ifelse(Attrition == "No", 0, 1), OverTime = ifelse(OverTime == "No", 0, 1), BusinessTravel = as.numeric(factor(BusinessTravel, levels = c("Non-Travel", "Rarely_Travel", "Frequently_Travel"))) - 1)
方法3:用recode函数快速映射
dplyr的recode函数可以简洁完成一对一映射:
new_df <- new_df %>% mutate(Attrition = ifelse(Attrition == "No", 0, 1), OverTime = ifelse(OverTime == "No", 0, 1), BusinessTravel = recode(BusinessTravel, "Non-Travel" = 0, "Rarely_Travel" = 1, "Frequently_Travel" = 2))
注意事项
- 你的代码里存在一处变量名错误:读取的数据集是
Dataset,但后续select用的是df,需要改成select(Dataset, ...)才能正常运行。 - 转换前建议先检查
BusinessTravel的所有取值,确保没有遗漏或拼写错误的类别:table(new_df$BusinessTravel)
内容的提问来源于stack exchange,提问作者Pepe Cobos
相关产品推荐
相关产品推荐

