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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:35:10