R语言如何以指定列为键将现有列值拆分为多个新列
R长表转动态角色宽表实现方案
你之前使用pivot_wider无法实现需求,核心原因是缺少同一用户下角色的顺序标识列,补充该列后即可自动生成对应数量的角色列,完全适配动态变化的角色数量,无需手动指定列数。
完整实现代码(tidyverse版本)
# 加载依赖包 library(tidyverse) # 处理逻辑(df为你的原始数据框名) df_result <- df %>% # 按姓名分组,给每个用户下的角色生成顺序序号 group_by(Name) %>% mutate(role_seq = str_pad(row_number(), width = 2, pad = "0")) %>% ungroup() %>% # 自动生成Role_01、Role_02...等列 pivot_wider( id_cols = Name, names_from = role_seq, values_from = Roles, names_prefix = "Role_", # 可选参数:空角色位置填充空字符串,默认填充NA values_fill = "" )
说明
- 不需要提前统计最大角色数量,代码会自动根据数据中的最大角色数生成对应列,后续角色数增长也无需修改逻辑
- 不需要前导零的话可以删掉
str_pad()包裹,直接写mutate(role_seq = row_number()),生成的列名会是Role_1、Role_2格式 - 保留了原始数据中角色的排列顺序,你也可以在
group_by之后加arrange(Roles)实现按角色名排序后再生成序号
内容的提问来源于stack exchange,提问作者Beatriz Araujo
相关产品推荐
相关产品推荐

