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
相关产品推荐
相关产品推荐

