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

如何在pivot_wider中拆分names_from列重复值为多列?

解决pivot_wider重复列名生成带序号列的问题

要实现将同一id下重复的priority对应的diagnosis拆分为primary_1、primary_2这类独立列,只需先给每个id+priority的分组添加序号,再结合序号生成新的列名即可,具体步骤如下:

步骤1:加载所需包

确保已安装并加载dplyr和tidyr:

library(dplyr)
library(tidyr)

步骤2:添加分组序号

对数据按id和priority分组,给每组内的行添加递增序号:

data_with_seq <- data %>%
  group_by(id, priority) %>%
  mutate(seq = row_number()) %>%
  ungroup()

处理后的数据会新增seq列,id为2的两条primary记录会分别标记为1和2:

idprioritydiagnosisseq
1primarydepression1
1secondaryanxiety1
1tertiaryanorexia1
2primarydepression1
2primaryanxiety2
2secondaryptsd1

步骤3:透视生成带序号的列

将priority和seq拼接成新的列名,再执行pivot_wider:

data_pivoted <- data_with_seq %>%
  pivot_wider(
    id_cols = id,
    names_from = c(priority, seq),
    values_from = diagnosis
  )

最终得到的结果会把重复priority的诊断拆分到独立列:

idprimary_1secondary_1tertiary_1primary_2
1depressionanxietyanorexiaNA
2depressionptsdNAanxiety

针对大型数据集的注意事项

由于你的数据集有200万行,建议:

  • 尽量在管道操作中完成所有步骤,避免中间数据对象占用过多内存
  • 若使用较新版本的tidyr,pivot_wider的效率已做优化,无需额外调整
  • 若内存紧张,可考虑使用data.table包的dcast函数,处理大数据集的速度更快

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:06:21