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

如何用dplyr的across结合rollapply为所有变量计算移动平均?

报错原因与解决方案

报错原因

  1. rollapply参数顺序错误:zoo::rollapply的标准调用格式是rollapply(data, width, FUN, ...),你把窗口大小3放在了第一个参数位置,漏掉了当前要处理的列数据(即~后的.),导致函数无法识别FUN参数,触发argument "FUN" is missing错误。
  2. 列筛选范围不当:报错提到date列,说明你的where(is.double)筛选规则把date列也纳入了计算范围——要么date列被误存储为double类型,要么你的筛选条件没有排除该列,而通常日期列不需要计算移动平均。

修改后的代码

方案一:排除date列,仅处理double类型列

df %>% 
  as_tibble() %>% 
  mutate(across(where(is.double) & !matches("date"), ~ zoo::rollapply(., width = 3, FUN = mean, align = 'right', fill = NA)))

方案二:直接指定A-Z列(明确目标列)

如果确定仅A到Z列需要计算移动平均,可直接指定列范围,避免误选其他列:

df %>% 
  as_tibble() %>% 
  mutate(across(A:Z, ~ zoo::rollapply(., width = 3, FUN = mean, align = 'right', fill = NA)))

补充说明

  • align='right'符合你需求的“包含t-2、t-1、t”的三期移动平均(窗口右端对齐,即每个结果对应t时刻)。
  • fill=NA会为前两行(无法形成完整窗口的行)填充NA,符合时间序列计算的常规逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:27:29