R中如何通过两次group_by分组统计行数并计算每人每场次正确率
错误原因
- 连续两次单独调用
group_by()会覆盖前一次的分组规则,最终仅按session_number分组,无法实现按「受试者+session」同时分组的需求 - 管道操作中使用
df$name、df$y的写法会直接提取整个数据集的对应列,不会读取当前分组的子集数据,导致计算逻辑完全错误 count()是返回分组计数汇总表的函数,不能直接在mutate()中作为分母使用,获取当前分组的总行数应该用n()函数
正确实现
方案1:保留原数据集所有行,新增正确率列
如果需要保留每一条试次的原始数据,同时在每行追加对应分组的正确率,使用mutate():
library(dplyr) by_name_by_session <- df %>% group_by(name, session_number) %>% mutate(rate = sum(y)/n())
方案2:仅输出正确率汇总表
如果不需要保留原始试次数据,只需要每位受试者每个session对应的正确率结果,使用summarise()更简洁:
rate_summary <- df %>% group_by(name, session_number) %>% summarise( rate = sum(y)/n(), .groups = "drop" )
以上代码运行后,你示例数据中Tom第一个session的正确率计算结果为0.5,符合预期。
内容的提问来源于stack exchange,提问作者mbabb4
相关产品推荐
相关产品推荐

