使用runner::runner实现按日滑动时间序列窗口及过滤不完整窗口
使用runner::runner()实现指定步长的完整滑动窗口
1. 实现1天步长的滑动窗口
runner()默认会为输入序列的每个观测值生成窗口,这就是你得到1小时步长结果的原因。要实现1天步长的滑动窗口,需通过at参数指定窗口计算的时间点——也就是你希望生成窗口的每日时间节点:
library(runner) # 生成原始时间序列(每小时一个时间点,覆盖5天+1小时) t <- seq(from = 0, to = 3600*24*5, by = 3600) # 生成按天间隔的目标计算时间点(步长为1天) at_points <- seq(from = 0, to = 3600*24*5, by = 3600*24) # 调用runner生成指定步长的窗口 result <- runner( x = t, k = 3600*24*3, # 窗口时长:3天(86400*3秒) idx = t, # 绑定原始时间索引 at = at_points, # 指定仅在目标时间点计算窗口 f = function(x) x # 替换为你的自定义计算函数 )
通过at参数限制计算节点,就能实现1天步长的滑动窗口,仅在你指定的每日时间点生成窗口结果。
2. 过滤不完整窗口
直接使用runner()的complete = TRUE参数,它会自动校验窗口是否覆盖了完整的k时长,不满足条件的窗口会返回NA,后续可直接过滤这些无效结果:
# 带完整窗口校验的最终代码 result <- runner( x = t, k = 3600*24*3, idx = t, at = at_points, complete = TRUE, # 仅保留覆盖完整3天时长的窗口结果 f = function(x) x # 替换为你的自定义计算函数 ) # 过滤NA值,得到仅包含完整窗口的结果 filtered_result <- result[!is.na(result)]
complete = TRUE会确保每个窗口的时间范围严格匹配设定的k值,只有当窗口包含从当前时间-3天到当前时间的完整区间时,才会执行自定义计算,否则返回NA。
内容的提问来源于stack exchange,提问作者Beres
相关产品推荐
相关产品推荐

