R语言按课程汇总多实例唯一作业集合的代码问题排查
解决按课程生成作业超集的代码异常问题
首先构造符合你描述的测试数据,确保代码逻辑可验证:
df <- data.frame( course = c(1,1,1,1,2,2,2,2), instance = c(1,1,2,2,1,1,2,2), assignment = c("A","B","B","C","A","C","B","A") )
你的核心需求是按course分组,提取每个组内所有唯一的assignment并排序。针对你遇到的异常结果,可能的原因和修正方案如下:
可能的错误原因及修正方法
1. 数据存在残留分组状态
如果之前对df执行过group_by操作但未用ungroup()取消分组,后续的group_by(course)会在原有分组基础上叠加,导致分组逻辑混乱,最终summarise返回异常结果。
修正代码:操作前先清除所有残留分组
library(tidyverse) df %>% ungroup() %>% group_by(course) %>% summarise( all_assignments = toString(sort(unique(assignment))), .groups = "drop" )
2. assignment列是因子类型
如果assignment列是因子而非字符型,且因子水平设置异常(比如仅包含部分取值),sort(unique(assignment))会返回不符合预期的结果。
修正代码:先将因子转为字符型
df %>% mutate(assignment = as.character(assignment)) %>% group_by(course) %>% summarise( all_assignments = toString(sort(unique(assignment))), .groups = "drop" )
3. dplyr版本兼容问题
旧版本的dplyr对.groups参数支持不完善,可改用手动取消分组的写法:
df %>% group_by(course) %>% summarise(all_assignments = toString(sort(unique(assignment)))) %>% ungroup()
正确运行结果
执行上述修正代码后,会得到符合需求的结果:
| course | all_assignments |
|---|---|
| 1 | A, B, C |
| 2 | A, B, C |
内容的提问来源于stack exchange,提问作者bvecc
相关产品推荐
相关产品推荐

