R语言基于索引列的无重叠滑动窗口聚合计算实现方法问询
方案1:手动分箱分组实现(逻辑清晰无歧义,推荐优先使用)
核心逻辑为以索引列最小值为起点,每10个索引单位划分一个无重叠区间,将每行数据匹配到对应区间后分组计算统计量,天然适配索引列不连续的场景:
library(dplyr) # 定义窗口大小(索引单位数) window_size <- 10 # 给每行分配所属窗口ID df <- df %>% mutate(window_id = floor((V3 - min(V3)) / window_size)) # 按窗口分组统计,可自定义需要的统计指标 window_result <- df %>% group_by(window_id) %>% summarise( window_start = min(V3), # 窗口起始索引值 window_end = min(V3) + window_size - 1, # 窗口结束索引值 V1_mean = mean(V1), # 数值列平均值 obs_count = n() # 窗口内观测数 )
方案2:基于slider包实现
如果要沿用slider工具链,可通过设置步长参数实现无重叠滑动:
library(slider) window_size <- 10 # 直接计算每个无重叠窗口的V1平均值 v1_window_mean <- slide_index_dbl( .x = df$V1, .i = df$V3, .f = mean, .before = 0, .after = window_size - 1, .step = window_size, .align = "left" )
如果需要保留完整的窗口信息,可以搭配分组操作同步提取窗口起止索引值。
runner包也可以通过设置idx参数指定索引列,同时调整步长参数实现相同效果,逻辑和slider方案一致。
内容的提问来源于stack exchange,提问作者user438383
相关产品推荐
相关产品推荐

