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

在R语言中使用accumulate结合嵌套条件设置数值上下限

解决带初始值与滞后值的条件累积计算问题

先给出可复现的数据:

date<-seq(as.Date('1968-04-01'),as.Date('1968-09-01'), by='month')
x<-c(20,10,-15,-50,11,-12)
df<-data.frame(date,x)

修正后的代码

你可以通过补充<0的条件判断,或者用更简洁的向量化函数来实现所有规则:

方式一:明确条件分支

library(dplyr)
library(purrr)

df %>% 
  mutate(y = accumulate(x, ~ {
    temp <- .x + .y
    if (temp > 50) {
      50
    } else if (temp < 0) {
      0
    } else {
      temp
    }
  }, .init = 50)[-1])

方式二:用pmax/pmin简化逻辑

这种写法更简洁,直接把结果限制在0到50的区间内,完全匹配你的规则:

df %>% 
  mutate(y = accumulate(x, ~ pmax(0, pmin(50, .x + .y)), .init = 50)[-1])

问题说明

原代码只处理了>50和≤50两种情况,但没有单独处理(x + lag(y)) < 0的场景,导致负数结果无法被替换为0。上述两种写法都补上了这个逻辑缺口,运行后得到的y列完全符合你的期望:c(50, 50, 35, 0, 11, 0)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:12:53