如何用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
相关产品推荐
相关产品推荐

