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

带可变上限的有界累积求和(cumsum)实现需求

实现可变上限的有界累积求和

针对需求:实现类似cumsum()的有界累积求和,结果不低于固定下限0,且不高于对应位置的可变上限(来自upper_bound列),以下提供两种可行实现方式:

基础R循环实现

无需额外依赖包,通过循环逐次计算并约束上下限:

test_data <- tibble(prec_et = c(1,2,-1,-3,5,4,5,4,3,-3,-2,4,3,4),
                    upper_bound = c(10,10,10,10,10,10,10,13,14,15,16,17,18,19))

result <- numeric(nrow(test_data))
current_sum <- 0

for (i in seq_along(test_data$prec_et)) {
  current_sum <- current_sum + test_data$prec_et[i]
  # 约束结果在[0, 当前upper_bound]区间内
  current_sum <- max(0, min(current_sum, test_data$upper_bound[i]))
  result[i] <- current_sum
}

result
# 输出:[1]  1  3  2  0  5  9 10 13 14 11  9 13 16 19

tidyverse 简洁实现

利用purrr::accumulate2处理双序列依赖的累积计算:

library(tidyverse)

test_data <- tibble(prec_et = c(1,2,-1,-3,5,4,5,4,3,-3,-2,4,3,4),
                    upper_bound = c(10,10,10,10,10,10,10,13,14,15,16,17,18,19))

test_data %>%
  mutate(cumsum_bounded = accumulate2(prec_et, upper_bound, 
                                      .init = 0,
                                      ~ {
                                        new_sum = .x + .y[[1]]
                                        max(0, min(new_sum, .y[[2]]))
                                      }) %>% tail(-1))

执行后cumsum_bounded列即为符合要求的有界累积求和结果,与期望输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:27:14