R语言中如何对含行列变量的两个数据表进行合并与聚合?
R实现多份测验成绩表按科目分组聚合
你需要的「跨表合并所有科目+按科目对正确/错误数求和」的操作,核心逻辑是先纵向拼接所有读入的成绩表,再按Subject列分组对数值指标求和,以下是两种常用实现方式:
方法1:tidyverse 方案(代码易读,适合日常批量处理)
# 加载数据处理包,未安装可先运行 install.packages("dplyr") library(dplyr) # 构造示例中的两份测验成绩表 quiz1 <- data.frame( Subject = c("Math", "Chemistry"), Correct = c(9, 7), Incorrect = c(1, 6) ) quiz2 <- data.frame( Subject = c("Math", "Biology"), Correct = c(4, 3), Incorrect = c(3, 6) ) # 执行合并聚合 agg_result <- bind_rows(quiz1, quiz2) %>% # 若需要保留科目在各表中首次出现的顺序,取消下面一行的注释即可 # mutate(Subject = factor(Subject, levels = unique(Subject))) %>% group_by(Subject) %>% summarise( Correct = sum(Correct), Incorrect = sum(Incorrect) ) %>% ungroup()
运行后输出的结果和预期完全匹配:
# A tibble: 3 × 3 Subject Correct Incorrect <chr> <dbl> <dbl> 1 Math 13 4 2 Chemistry 7 6 3 Biology 3 6
后续如果有更多测验表,只需要把所有从Excel读入的表存入列表,传入bind_rows()即可一次性完成拼接,不需要手动逐张添加。
方法2:Base R 方案(无需安装第三方包)
如果不想依赖额外扩展包,用R自带功能即可实现:
# 纵向拼接两张成绩表 merged_df <- rbind(quiz1, quiz2) # 按Subject分组对数值列求和 agg_result <- aggregate(cbind(Correct, Incorrect) ~ Subject, data = merged_df, FUN = sum) # 若需要匹配科目首次出现的顺序,取消下面一行注释即可 # agg_result <- agg_result[match(unique(merged_df$Subject), agg_result$Subject),]
运行结果:
Subject Correct Incorrect 1 Math 13 4 2 Chemistry 7 6 3 Biology 3 6
内容的提问来源于stack exchange,提问作者Tayyab Mirza
相关产品推荐
相关产品推荐

