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

如何用dplyr在R的dataframe中添加累积运行平均值列

问题原因

你原有代码出错的核心原因是在dplyr的mutate()上下文里混用了$提取符调用原始数据框的列,会破坏dplyr的行级运算环境,导致Grade[data$Exam <= Exam]的筛选逻辑不符合逐行累积的预期。

正确实现代码

方案1:用cumsum结合行号(兼容性最好)

library(dplyr)
data <- data %>%
  mutate(RunningAvg = cumsum(Grade) / row_number())

如果你的Exam列是严格从1开始连续递增的序号,也可以直接除以Exam,效果完全一致:

data <- data %>%
  mutate(RunningAvg = cumsum(Grade) / Exam)

方案2:用dplyr内置累积均值函数(可读性更强)

dplyr 1.0.0及以上版本提供了专门的cummean()函数可以直接实现累积均值计算,代码更简洁:

data <- data %>%
  mutate(RunningAvg = cummean(Grade))

运行任意一种方案后都可以得到你需要的结果:

> data
  Exam Grade RunningAvg
1    1    90      90.00
2    2    88      89.00
3    3    95      91.00
4    4    80      88.25
5    5    82      87.00

内容的提问来源于stack exchange,提问作者Chris Ludlam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:48:03