R中是否有函数可统计分类列特定值的分组计数并新增至数据框
报错原因
你使用的aggregate(subject["math"] ~ student, data = df, length)存在语法逻辑错误:你试图筛选subject为math的条目再计数,但公式中subject["math"]无法正确提取对应值,最终触发变量长度不匹配的报错。
实现方案
方法1:base R 单行实现(无需额外安装包)
使用ave函数可直接完成分组计算,且结果会自动匹配回原数据框的对应行:
df$`total 'math'` <- ave(df$subject == "math", df$student, FUN = sum)
逻辑说明:df$subject == "math"会生成布尔值向量,按学生分组求和时,布尔值TRUE会被识别为1、FALSE为0,求和结果就是对应学生的math科目累计出现次数。
方法2:dplyr 写法可读性更强
如果你习惯tidyverse生态,用分组+新增列的逻辑更直观:
library(dplyr) df <- df %>% group_by(student) %>% mutate(`total 'math'` = sum(subject == "math")) %>% ungroup()
注意:包含特殊字符的列名需要用反引号包裹,避免R解析报错。
两种方案运行后得到的结果和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者lioness22
相关产品推荐
相关产品推荐

