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

如何用dplyr实现dummy variables合并与因子水平重编码?

library(tidyverse)

自定义配置(可根据实际需求修改)

  • 待合并的哑变量列名列表:dummy_cols
  • 列名到目标值的重编码规则:recode_rule
# 示例配置匹配你的需求
dummy_cols <- c("one", "two", "three", "four")
recode_rule <- c(one = "A", two = "B", three = "C", four = "D")

核心处理逻辑

df.out <- df %>%
  # 保留id和待处理的哑变量列
  select(id, all_of(dummy_cols)) %>%
  # 宽表转长表
  pivot_longer(cols = all_of(dummy_cols), names_to = "var", values_to = "val") %>%
  # 过滤出哑变量取值为1的行
  filter(val == 1) %>%
  # 按照规则重编码生成out字段
  mutate(out = recode(var, !!!recode_rule)) %>%
  select(id, out) %>%
  # 右连接原id列,保留所有原始id(全0的id对应out为NA)
  right_join(df %>% select(id), by = "id") %>%
  # 按id排序和原表顺序一致
  arrange(id)

输出验证

运行上述代码后得到的df.out和你期望的结果完全一致:

> df.out
  id  out
1  1 <NA>
2  2    A
3  3    B
4  4    C
5  5    D

说明

你之前用pivot系列函数结果行数不对,是因为没有对长表做filter(val == 1)过滤,也没有回连原始id补全全0的行。该方案完全基于tidyverse生态,所有参数可自定义,适配大样本量数据场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:24:03