R语言实现长转宽:将重复行的Note字段转为多列
解决方案
你之前的代码核心问题是pivot_wider的参数设置错误——把names_from和values_from都设为Note,会把每个不同的Note文本内容作为列名,而非按顺序生成Note 1/2/3这类序号列。正确的做法是先给每个ID下的Note生成递增序号,再基于序号转宽格式。
完整可行代码
假设你的原始数据框名为data,使用以下代码即可实现需求:
library(tidyverse) # 1. 按ID和Company分组,给每个Note生成顺序序号 data_with_note_num <- data %>% group_by(ID, Company) %>% mutate(Note_num = paste0("Note ", row_number())) %>% ungroup() # 2. 转换为宽格式,空值填充NA data_wide <- data_with_note_num %>% pivot_wider( id_cols = c(ID, Company), names_from = Note_num, values_from = Note, values_fill = NA ) # 查看最终结果 data_wide
代码说明
- 第一步通过
group_by(ID, Company)锁定同一主体,row_number()给组内的Note按原有顺序编号,再拼接成"Note 1""Note 2"的列名格式。 - 第二步
pivot_wider中,id_cols指定保留的主键列(ID和Company),names_from用生成的序号列创建新列,values_from指定填充内容为原Note列,values_fill确保无对应值时自动填充NA,完全匹配你的需求。
原代码失败原因
原代码pivot_wider(data, names_from = Note, values_from = Note)会把每个具体的Note文本作为列名(比如Note内容是"售后咨询",就会生成Note_售后咨询这类列),这和你要的按顺序分栏的目标完全不符。
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

