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

R语言tibbletime包rollify函数跨年度滚动计算异常如何解决

问题原因
  • 你在调用summarize()汇总月度数据后,数据集默认保留了year维度的分组结构(可从你提供的dput输出中class = "grouped_df"、分组字段为year得到验证)
  • rollify函数会继承数据的分组属性,在每个分组内独立计算滚动值,因此不同年份的数据被割裂,无法跨年度参与计算,同时会输出「Adding missing grouping variables: year」的提示。
解决方法

在计算滚动均值前调用ungroup()取消数据集的分组即可,修改后的完整代码如下:

library(tidyverse)
library(lubridate)
library(tibbletime)
payments <- read_csv("payments.csv")

# 计算月度汇总
monthly_sum_df <- payments %>%
  group_by(year(Date), month(Date)) %>%
  summarize(monthly_sum = sum(Amount, na.rm = TRUE))

colnames(monthly_sum_df) <- c("year", "month", "monthly_sum")

# 处理日期字段后取消分组
monthly_sum_df <- monthly_sum_df %>%
  drop_na() %>%
  mutate(date = paste(month, "-", year)) %>%
  mutate(date = parse_date_time(date, "m - y")) %>%
  ungroup() # 关键:取消按年的分组

# 定义滚动均值函数
mean_roll_3 <- rollify(mean, window = 3)

# 计算跨年度连续滚动均值
monthly_sum_df %>%
  select(date, monthly_sum) %>%
  mutate(mean_3 = mean_roll_3(monthly_sum))
结果验证

修改后2019年1月对应的mean_3值将由2018年11月、2018年12月、2019年1月三个月的monthly_sum计算得到,值为(214159.64 + 129344.37 + 24507.88)/3 = 122670.63,不再返回NA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:06:03