You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多选项分类变量转换为数值变量?以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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:15:30