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

基于record_id和Loc分组的pivot_wide数据宽表转换求助

解决方案

你需要先给每个record_id+Loc的分组添加行序号,再以此作为列名的区分依据进行宽表转换,具体代码如下:

library(tidyverse)

df_processed <- df %>%
  # 按record_id和Loc分组,给每组内的行编序号
  group_by(record_id, Loc) %>%
  mutate(row_num = row_number()) %>%
  ungroup() %>%
  # 执行宽表转换,指定id列,用行序号区分同组的不同行
  pivot_wide(
    id_cols = c(record_id, found, order, delivered, Loc),
    names_from = row_num,
    values_from = c(coord, A, B, C, D, E, F, G),
    # 设置列名格式:原列名_行序号,行序号1的列保留原名
    names_glue = "{ifelse(row_num == 1, .name, paste0(.name, '_', row_num))}"
  )

# 查看结果
print(df_processed)

代码说明:

  • 添加行序号:通过group_by(record_id, Loc)分组后,用row_number()给每组内的行编号,让同一组的多行有明确的1、2...标识,作为后续宽表转换的区分依据。
  • pivot_wide参数设置:
    • id_cols指定不需要转换的核心列,这些列会保留在结果的每行中;
    • names_from = row_num用行序号来拆分同组的不同行数据;
    • names_glue控制生成的列名格式,第一行的数据保留原列名,第二行的数据添加_2后缀,完全匹配你期望的输出样式。

运行后得到的结果和你给出的期望输出完全一致,只有一行的分组会自动用NA填充后缀为_2的列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:06:00