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

如何在使用recipes包的step_dummy()函数创建哑变量时指定参考水平?

指定step_dummy()的参考水平方法

好问题!其实step_dummy()本身并没有提供直接指定参考水平的参数,但我们可以通过提前调整因子的基准水平来达到同样的效果,比先生成全量哑变量再删除要更直接、更符合tidymodels的流水线设计思路。

核心思路

step_dummy()默认会把因子的第一个水平作为参考水平(不会生成对应的哑变量列)。所以只要我们把想要作为参考的水平调整为因子的第一个水平,再运行step_dummy()就可以直接得到以该水平为基准的哑变量。

具体实现代码

我们可以用forcats::fct_relevel()来轻松调整因子水平顺序,或者手动修改因子的levels参数:

library(tidymodels)
library(forcats) # 用于便捷调整因子水平
data(okc)

# 方法1:用fct_relevel指定参考水平为"vegan"
recipe(Class ~ ., data = okc) %>%
  step_mutate(diet = fct_relevel(diet, "vegan")) %>% # 将"vegan"移到因子水平的第一个位置
  step_dummy(diet) %>%
  prep() %>%
  bake(new_data = NULL) %>%
  select(starts_with("diet")) %>%
  names()
#> Warning: There are new levels in a factor: NA
#>  [1] "diet_anything"             "diet_halal"               
#>  [3] "diet_kosher"               "diet_mostly.anything"     
#>  [5] "diet_mostly.halal"         "diet_mostly.kosher"       
#>  [7] "diet_mostly.other"         "diet_mostly.vegan"        
#>  [9] "diet_mostly.vegetarian"    "diet_other"               
#> [11] "diet_strictly.anything"    "diet_strictly.halal"      
#> [13] "diet_strictly.kosher"      "diet_strictly.other"      
#> [15] "diet_strictly.vegan"       "diet_strictly.vegetarian" 
#> [17] "diet_vegetarian"

可以看到输出里没有diet_vegan列,说明它已经被当作参考水平了,完全符合你的需求。

如果不想额外加载forcats包,也可以手动修改因子水平:

recipe(Class ~ ., data = okc) %>%
  step_mutate(
    diet = factor(
      diet,
      levels = c("vegan", setdiff(levels(diet), "vegan")) # 把"vegan"放在最前面,其余水平保持原顺序
    )
  ) %>%
  step_dummy(diet) %>%
  prep() %>%
  bake(new_data = NULL) %>%
  select(starts_with("diet")) %>%
  names()

和你原有方法的对比

这种方法比你之前“生成全量哑变量再删除参考列”的方式更高效:

  • 不需要生成多余的哑变量列,减少内存占用
  • 保持预处理流水线的连贯性,逻辑更清晰
  • 避免后续手动删除列可能带来的错误(比如列名拼写错误)

补充说明

tidymodels的设计理念倾向于通过独立的预处理步骤来拆分功能,所以step_dummy()专注于生成哑变量,而调整因子水平的工作交给step_mutate()配合因子处理函数来完成,这样每个步骤的职责更单一,也更灵活。

内容的提问来源于stack exchange,提问作者Mark Rieke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:27:36