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

按指定列的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:02:45