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
相关产品推荐
相关产品推荐

