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

R语言宽格式转换:按教师分组生成课程列而非全局ID列

解决按教师分组生成组内课程序号的宽格式转换问题

原代码的问题出在全局生成的courseID——它是整个数据集的行号,不是每个教师组内的课程序号,所以转宽后Teacher2的课程会对应全局的第4、5列,前面的course1到course3自然都是NA。

要实现按教师分组生成组内课程序号再转宽的需求,只需两步:

  • 按teacher分组,生成组内的课程序号
  • 基于组内序号转宽格式,自定义列名前缀

修正后的完整代码

library(tidyverse)

# 原始数据
course <- c('Math1', 'English', 'Biology', 'Math2', 'Physics')
teacher <- c('Teacher1', 'Teacher1', 'Teacher1', 'Teacher2', 'Teacher2')
data <- data.frame(course, teacher)

# 关键:分组生成组内课程序号
data <- data %>%
  group_by(teacher) %>%
  mutate(course_num = row_number()) %>%  # 每组内按原有顺序生成1、2、3...
  ungroup()

# 转宽格式,自动生成course1、course2等列
data_wide <- data %>%
  pivot_wider(
    values_from = course,
    names_from = course_num,
    names_glue = "course{course_num}"  # 自定义列名格式
  )

# 查看结果
print(data_wide)

输出结果

# A tibble: 2 × 4
  teacher  course1 course2 course3
  <chr>    <chr>   <chr>   <chr>  
1 Teacher1 Math1   English Biology
2 Teacher2 Math2   Physics NA     

这样每个教师的课程都会从course1开始依次填充,不会出现前面列空值的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:21:37