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

如何使用purrr批量将factor因子变量转换为二分类哑变量

错误原因

你之前的写法是将数据框df通过管道传入map的第一个参数,map会遍历df的每一列作为自定义函数的输入,相当于你给a、b等数值列调用fac_to_d,自然触发mutate找不到对应方法的报错。你需要迭代的是要处理的因子列向量cols,而非数据框本身。

调整方案(复用你现有函数)

你需要的是累积迭代的reduce函数,每次将上一轮处理后的数据框传入下一次函数调用,和你手动连续调用两次的逻辑完全一致:

cols <- c("c", "e")
cols %>% reduce(fac_to_d, .init = df)

运行结果和你手动调用的输出完全相同。

更优tidy风格实现

不需要自定义函数,直接使用tidyverse原生逻辑即可,还能自动处理列名前缀避免不同因子出现同水平时的列名冲突:

方案1:pivot系列原生函数

library(tidyr)
library(dplyr)

df %>%
  pivot_longer(cols = all_of(cols)) %>%
  mutate(val = 1) %>%
  pivot_wider(names_from = c(name, value),
              values_from = val,
              values_fill = 0,
              names_sep = "")

方案2:基于model.matrix的极简实现

适合不需要自定义列名的场景,代码更短:

bind_cols(
  df %>% select(-all_of(cols)),
  model.matrix(~ 0 + c + e, data = df) %>% as_tibble()
)

输出会自动给列名加上因子名前缀,例如cRose、eParis,避免列名冲突风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:06:03