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

如何在dplyr中使用lag()函数,实现排除前7行的滚动平均?

解决方案:用rollapplyr实现排除紧邻前7行的滚动平均

你需要的是计算滚动平均时跳过当前行紧邻的前7个观测,只使用再往前的28个数据点来计算均值。原代码的逻辑无法实现这个需求,通过调整rollapplyr的width参数可以精准指定窗口范围,达成目标。

修正后的代码

library(tidyverse)
library(zoo)

set.seed(123) # 设置随机种子,保证结果可复现
stack <- data.frame(
  date = seq(Sys.Date(), Sys.Date() - 99, -1),
  var1 = round(rnorm(100, 8000, 500))
)

# 计算排除紧邻前7行的28期滚动平均
stack <- stack %>%
  mutate(
    var1_roll_mean = rollapplyr(
      var1,
      width = list(-(8:35)), # 窗口为当前行往前第8到第35行,共28个观测
      FUN = mean,
      partial = TRUE, # 窗口数据不足28个时,用现有数据计算均值(可根据需求关闭)
      fill = NA # 数据不足时填充NA
    )
  )

关键参数说明

  • width = list(-(8:35)):这是实现需求的核心。负数索引代表相对当前位置的前置偏移,-(8:35)明确指定只取当前行之前第8到第35个观测,直接跳过了紧邻的前7行(第1到第7个前置数据),刚好覆盖28个数据点。
  • 如果需要调整窗口内的数据量,比如排除前7行后取最近的20个观测,只需把索引改成-(8:(8+19))即可。
  • partial = TRUE:保留这个参数可以让窗口在数据不足28个时(比如前35行的观测),用现有可用数据计算均值;如果要求必须凑齐28个数据才计算,把它改成FALSE即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:43:23