基于tsibble的严格时间聚合实现:不完整低频值自动填充为NA
tsibble严格时间序列聚合实现方案(不完整周期返回NA)
你可以通过在聚合阶段判断每个分组的有效观测数是否匹配完整周期长度来实现需求,方案完全基于tsibble和dplyr原生能力,无需额外操作:
library(tsibble) library(dplyr) example <- as_tsibble(ts(rep(1,10),frequency = 12,start=2010)) # 月度转季度严格聚合 example %>% index_by(quarter = ~ yearquarter(.)) %>% summarize( value = if_else(n() == frequency(.)/4, sum(value), NA_real_) )
运行后得到的结果如下:
# A tsibble: 4 x 2 [1Q] quarter value <qtr> <dbl> 1 2010 Q1 3 2 2010 Q2 3 3 2010 Q3 3 4 2010 Q4 NA
方案逻辑说明
- tsibble本身保证索引唯一且有序,
index_by按季度分组后,每个分组的行数n()即为该季度下实际存在的月度观测数 - 月度数据的年度频率为12,对应每个季度的完整观测数为
12/4=3,使用frequency(.)动态读取原始数据频率无需硬编码 - 若分组观测数不等于完整周期长度则判定为不完整周期,直接返回NA,否则返回聚合结果
- 可适配任意聚合粒度:比如转年度聚合则判断条件改为
n() == frequency(.),转半年度改为n() == frequency(.)/2即可
你之前调用
fill_gaps未生效是因为调用时机在index_by之后,此时索引已经切换为季度粒度,fill_gaps只会补全缺失的季度不会补全原始月度观测,不符合你不手动补全观测的要求,因此上述分组判断的方案更适配你的需求。
内容的提问来源于stack exchange,提问作者Arnaud Feldmann
相关产品推荐
相关产品推荐

