按指定列的n值计算数据框列前向滚动和,slide_sum参数报错求助
解决方案:基于逐行可变窗口的前向滚动和计算
报错原因
slider::slide_sum() 的 after 参数要求传入单个整数,用来定义全局统一的前向窗口长度。但你传入的是整个b列(长度为10的向量),每行的窗口大小都不同,不符合参数要求,因此触发错误。
解决方法
因为窗口大小是逐行变化的,需要对每行单独计算滚动和,以下是两种可行方案:
方案1:使用rowwise()逐行处理
结合dplyr::rowwise()让每行独立计算,传入当前行的b值作为窗口大小:
library(dplyr) library(slider) # 示例数据框 d <- tibble( a = 1:10, b = c(1,2,1,3,2,1,2,3,1,2) ) d %>% rowwise() %>% mutate( c = slide_sum( a, after = b, # 当前行的b值作为前向窗口长度 .before = 0, # 不包含当前行之前的值 .complete = FALSE# 窗口不足时仍计算现有值的和 ) ) %>% ungroup()
方案2:使用purrr::map2()遍历计算
通过遍历行号和b列的值,提取对应位置的滚动和结果:
library(dplyr) library(slider) library(purrr) d %>% mutate( c = map2_dbl( .x = row_number(), .y = b, ~ slide_sum(a, after = .y, .before = 0, .complete = FALSE)[.x] ) )
结果验证
以示例数据为例,部分结果逻辑如下:
- 第1行:
b=1,计算a1+a2=1+2=3 - 第2行:
b=2,计算a2+a3+a4=2+3+4=9 - 第3行:
b=1,计算a3+a4=3+4=7
内容的提问来源于stack exchange,提问作者Saurabh Verma
相关产品推荐
相关产品推荐

