如何用dplyr检查TIMSS数据集中同班学生的教师一致性
问题描述
在TIMSS数据集中,学生嵌套于班级中,每位学生关联1至4位教师。需要找出班级内持有其他学生都未关联的教师的学生记录,要求用dplyr管道链实现。
示例数据
df <- data.frame( IDSTUD = c(50040201, 50040201, 50040201, 50040201, 50040204, 50040204, 50040204, 50040204, 50120303, 50120303, 50120303, 50120303, 50120304, 50120304, 50120304), IDCLASS = c(500402, 500402, 500402, 500402, 500402, 500402, 500402, 500402, 501203, 501203, 501203, 501203, 501203, 501203, 501203), IDTEACH = c(500402, 500403, 500404, 500405, 500405, 500404, 500403, 500402, 501201, 501202, 501205, 501203, 501203, 501205, 501202) )
解决方案代码
library(dplyr) unique_teachers <- df %>% # 按班级+教师分组,统计关联的不同学生数量 group_by(IDCLASS, IDTEACH) %>% mutate(student_count = n_distinct(IDSTUD)) %>% ungroup() %>% # 筛选出仅被单个学生关联的教师记录 filter(student_count == 1) %>% # 保留目标列 select(IDSTUD, IDCLASS, IDTEACH)
代码逻辑说明
group_by(IDCLASS, IDTEACH):以班级和教师的组合为分组单元,确保统计范围限定在单个班级内的单个教师。mutate(student_count = n_distinct(IDSTUD)):计算每组内的不同学生数量,避免同一学生重复关联教师时的重复计数。filter(student_count == 1):筛选出仅被一个学生关联的教师,这些教师就是对应学生独有的资源。
运行结果
> unique_teachers IDSTUD IDCLASS IDTEACH 1 50120303 501203 501201
内容的提问来源于stack exchange,提问作者Pål Bjartan
相关产品推荐
相关产品推荐

