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函数专门处理滚动窗口计算,非常适合这个场景:
- 先安装并加载包(如果没安装过):
install.packages("zoo") library(zoo)
- 计算滚动均值并添加到DataFrame:
# 计算滚动均值,设置窗口大小7,右对齐(取当前及前6个值),不足窗口的位置填NA,最后四舍五入为整数 df$week_avg <- round(rollmean(df$col1, k = 7, align = "right", fill = NA))
方法二:使用dplyr+slider(Tidyverse风格)
如果你习惯用Tidyverse工具链,可以用slider包配合dplyr来实现:
- 安装并加载依赖包:
install.packages(c("dplyr", "slider")) library(dplyr) library(slider)
- 用管道流计算并添加列:
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就和你想要的格式完全一致了。比如前几个值:
| col1 | week_avg |
|---|---|
| 96 | NA |
| 56 | NA |
| 53 | NA |
| 63 | NA |
| 70 | NA |
| 65 | NA |
| 72 | 68 |
| 111 | 70 |
完全匹配你给出的示例结果~
内容的提问来源于stack exchange,提问作者Zmnako Awrahman
相关产品推荐
相关产品推荐

