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

如何在R中用pivot_wider按分组将变量的唯一值转为宽格式列?

用一次pivot_wider()实现需求

完全可以通过一次pivot_wider()调用完成转换,核心是先给每个Student组内的观测添加一个序号标记,作为宽表转换的列名区分依据。

实现步骤

  1. 给每个学生的两行观测添加组内序号(ref_num,取值1/2),用来区分第1、第2位裁判
  2. 调用pivot_wider(),通过names_from指定序号列,values_from指定要转换的Referee和Rating列,同时用names_glue自定义输出列名,直接得到目标格式的列名

完整代码

library(tidyverse)

# 原始数据
df <- data.frame(Student = rep(c(17383, 16487, 17646, 2648, 3785), each = 2),
                 Referee = c("Paul Severe", "Cathy Nice", "Jean Exigeant", "Hilda Ehrlich", "John Rates",
                             "Eva Luates", "Fred Notebien", "Aldous Grading", "Hans Streng", "Anna Filaktic"),
                 Rating = format(round(x = sqrt(sample(15:95, 10, replace = TRUE)), digits = 3), nsmall = 3)
)

# 一次pivot_wider完成转换
df_result <- df %>%
  group_by(Student) %>%
  mutate(ref_num = row_number()) %>% # 添加组内序号
  pivot_wider(
    id_cols = Student,
    names_from = ref_num,
    values_from = c(Referee, Rating),
    names_glue = "{case_when(.value == 'Referee' ~ '{.value}_{ref_num}',
                            .value == 'Rating' ~ 'Rating_Ref_{ref_num}')}"
  ) %>%
  ungroup()

# 查看结果
df_result

结果说明

转换后的结果和你手动生成的df_wanted结构完全一致:每个学生对应一行,包含Referee_1/Referee_2两位裁判姓名,以及对应的Rating_Ref_1/Rating_Ref_2评分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:25:35