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

基于y列滚动窗口计算x列累积和的R语言代码修正问题

问题修正方案

你的代码返回矩阵的原因是:rollapply 使用 cumsum 作为函数时,会对每个窗口返回完整的累积和序列(比如窗口大小为3时,会返回3个值),最终所有窗口的结果组合成矩阵。而你需要的是每个窗口内累积和的最终值(即窗口元素的总和),可以通过以下两种方式修正:

方法1:直接使用sum作为计算函数

将cumsum替换为sum,因为sum会直接返回窗口内所有元素的总和,正好匹配你的预期结果:

library(zoo)
x <- c(1,2,3,4,5)
y <- c(1,1,2,3,2)
rollapply(x, y, sum, align="right", partial=TRUE)

运行结果:[1] 1 2 5 9 9,完全符合预期。

方法2:保留cumsum但取每个窗口的最后一个值

如果你需要明确体现“累积到窗口末尾”的逻辑,可以自定义函数,对每个窗口的累积和序列取最后一个元素:

library(zoo)
x <- c(1,2,3,4,5)
y <- c(1,1,2,3,2)
rollapply(x, y, function(z) tail(cumsum(z), 1), align="right", partial=TRUE)

运行结果同样为:[1] 1 2 5 9 9。

补充说明

align="right" 参数确保每个窗口以当前元素为终点,往左取对应y指定宽度的元素,这和你预期的“从左侧开始累积到当前位置”的逻辑一致;partial=TRUE 允许处理窗口宽度超出序列起始位置的情况(不过在你的案例中,所有窗口都不会超出起始位置,这个参数可以保留也可以去掉,结果一致)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:10:00