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

如何基于变量唯一值重组学生课程完成数据集?

在R中高效聚合百万级学生课程数据集

你需要将150万行的学生课程数据按唯一Student ID合并,把每个学生的修读课程整合为列表变量,以下是两种高效的实现方案:

方案一:使用dplyr(tidyverse生态)

dplyr是R中常用的数据处理工具,语法直观易读,适合熟悉tidyverse的用户:

library(dplyr)

# 假设你的原始数据集名为student_data
aggregated_data <- student_data %>%
  # 按所有与Student ID一一对应的字段分组(确保同一ID的这些字段无冲突)
  group_by(Student_ID, Gender, City, ETC.) %>%
  # 将每个分组的Course列转为列表
  summarize(Courses = list(Course), .groups = "drop")
  • group_by需包含所有同一Student ID下值唯一的字段(如Gender、City),避免因数据脏污导致不必要的分组
  • .groups = "drop"用于取消分组状态,方便后续数据操作

方案二:使用data.table(大数据优化)

针对百万级规模的数据集,data.table在内存占用和处理速度上更具优势,是大数据处理的首选:

library(data.table)

# 将数据转换为data.table格式(若原始数据已是则可省略)
setDT(student_data)

# 按指定字段分组,聚合Course为列表
aggregated_data <- student_data[, .(Courses = list(Course)), 
                                by = .(Student_ID, Gender, City, ETC.)]
  • data.table的语法更简洁,底层实现优化了大数据处理的性能,比dplyr更适合150万行级别的数据

关键注意事项

  1. 数据校验:提前检查同一Student ID对应的非Course字段(如Gender、City)是否一致,可通过以下代码排查脏数据:
    # dplyr方式
    student_data %>% 
      group_by(Student_ID) %>% 
      filter(n_distinct(Gender) > 1 | n_distinct(City) > 1)
    
    # data.table方式
    student_data[, .(gender_count = uniqueN(Gender), city_count = uniqueN(City)), by = Student_ID][gender_count > 1 | city_count > 1]
    
  2. 列表列操作:若后续需要展开列表列或处理其中的元素,可使用tidyr::unnest()(dplyr生态)或data.table的相关函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:17:05