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

R语言:对单列DataFrame执行窗口大小为7的滚动均值计算

实现滚动7值均值的解决方案

没问题,我来帮你搞定这个滚动均值的需求!你需要的是对单列DataFrame做窗口大小为7的滚动平均,前6个位置因为凑不够7个值留空,从第7个位置开始计算当前及之前共7个值的均值,最终得到包含col1和week_avg的表格。

第一步:原始数据定义

先确认你的初始数据:

df <- data.frame(col1 = c(96, 56, 53, 63, 70, 65, 72, 111, 65, 58, 59, 74, 57, 70, 89, 60, 60, 52, 65, 58, 84, 54, 55, 51, 72))

方法一:使用zoo包(简洁高效)

zoo包的rollmean函数专门处理滚动窗口计算,非常适合这个场景:

  1. 先安装并加载包(如果没安装过):
install.packages("zoo")
library(zoo)
  1. 计算滚动均值并添加到DataFrame:
# 计算滚动均值,设置窗口大小7,右对齐(取当前及前6个值),不足窗口的位置填NA,最后四舍五入为整数
df$week_avg <- round(rollmean(df$col1, k = 7, align = "right", fill = NA))

方法二:使用dplyr+slider(Tidyverse风格)

如果你习惯用Tidyverse工具链,可以用slider包配合dplyr来实现:

  1. 安装并加载依赖包:
install.packages(c("dplyr", "slider"))
library(dplyr)
library(slider)
  1. 用管道流计算并添加列:
df <- df %>%
  # .before=6表示取当前行之前的6行,加上当前行共7个值;.complete=TRUE要求窗口满7个值才计算
  mutate(week_avg = slide_dbl(col1, ~mean(.x), .before = 6, .complete = TRUE)) %>%
  # 四舍五入为整数,和你给出的示例格式一致
  mutate(week_avg = round(week_avg))

验证结果

运行完上述代码后,你得到的df就和你想要的格式完全一致了。比如前几个值:

col1week_avg
96NA
56NA
53NA
63NA
70NA
65NA
7268
11170

完全匹配你给出的示例结果~

内容的提问来源于stack exchange,提问作者Zmnako Awrahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:10:21