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

如何在R语言数据框中生成每周滑动时间窗口(行重复+1偏移)

生成每周滑动时间窗口的解决方案

核心思路

滑动周窗口的本质是连续取7天为一组,每组与前一组偏移1天,总窗口数为总天数 - 7 + 1。我们需要为每个窗口生成对应子数据集,添加窗口标识后合并,实现数据的“重复”与偏移。

代码实现

基于你提供的初始代码,替换原有的非重叠窗口逻辑,改为滑动窗口:

library(EpiEstim)
data(Flu2009)

# 初始数据准备(保留原有代码)
data_infer <- data.frame(t = 1:length(Flu2009$incidence$I), 
                         I = c(Flu2009$incidence$I),
                         OI = overall_infectivity(Flu2009$incidence, Flu2009$si_distr))
data_infer$logOI <- log(data_infer$OI)

# 生成滑动周窗口数据
window_length <- 7
total_days <- nrow(data_infer)
# 计算总滑动窗口数:总天数 - 窗口长度 + 1
total_windows <- total_days - window_length + 1

# 遍历每个窗口,提取对应数据并添加窗口标识
sliding_data <- do.call(rbind, lapply(1:total_windows, function(window_idx) {
  # 提取当前窗口的行范围:从window_idx到window_idx+6(共7天)
  window_rows <- window_idx:(window_idx + window_length - 1)
  subset_data <- data_infer[window_rows, ]
  # 标记当前窗口编号(对应1-7、2-8...的窗口顺序)
  subset_data$window_id <- window_idx
  # 可选:标记窗口内的相对天数(1到7)
  subset_data$day_in_window <- 1:window_length
  return(subset_data)
}))

代码说明

  • window_length固定为7,对应每周窗口的天数;
  • total_windows计算出所有可能的滑动窗口数量,比如42天数据会生成36个窗口;
  • lapply遍历每个窗口,提取对应行后添加window_id(区分不同滑动窗口)和day_in_window(窗口内的相对位置);
  • do.call(rbind, ...)将所有窗口的子数据集合并为一个完整的滑动窗口数据集。

验证结果

滑动窗口数据集sliding_data中:

  • 每个window_id对应一组7天的数据(如window_id=1是1-7天,window_id=2是2-8天,以此类推);
  • 总行数为total_windows * 7,实现了数据按滑动窗口的“重复”需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:22:21