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

