【问题标题】:Cumsum with criteria in RCumsum 与 R 中的标准
【发布时间】:2018-05-23 08:12:42
【问题描述】:

我想在 R 中对 值列表 执行此 excel 操作:

=IF($H2+$G3>0;$H2+$G3;0)

数据:

d <- c(0.007084, 0.000037, -0.400000, -0.400000, 0.000033, 0.000467, 0.001167, 0.000363)

我想在 R 中创建的 excel 结果是:

result <- c(0.007084, 0.007121, 0.000000, 0.000000, 0.000033, 0.000499, 0.001666, 0.002030)

d <- data.frame(values, result)

应该执行累积和,但如果和为负,结果应该为零。 所以我需要一个 cumsum 函数,如果总和为负,它会重置为零。但是在下一行中,总和应基于 fx 0.000000 和 0.000033,这使得总和在下一行中再次增长,总和为 0.000033 和 0.000467 (=0.000499)。

我解释得够清楚吗?

基于这些尝试了不同的方法但没有成功:

fx lapply、dplyr、查找....

库(dplyr)

d1 <- d %>%
  group_by(grp = cumsum(lag(cumsum(replace(values, is.na(values), 0.000000)) < 0.000000, default = TRUE))) %>%
  mutate(calc = cumsum(replace(values, is.na(values), 0.000000)), calc =     replace(calc, calc < 0.000000, 0.000000)) %>%
  ungroup() %>%
  select(-grp)

应该很简单,但由于某种原因我无法让它工作......

resetting cumsum if value goes to negative in r

https://www.dataquest.io/blog/control-structures-in-r-using-loops-and-if-else-statements/

How to get cumulative sum based on a condition

Conditional cumsum with reset

【问题讨论】:

    标签: r loops if-statement dplyr cumsum


    【解决方案1】:

    cumsum 的循环(速度较慢)替代方案是Reduce(`+`, x, accumulate = TRUE)。但是,这种Reduce 方法可以修改为您重置的累积总和:

    Reduce(function(x, y) if (x + y > 0) x + y else 0, d, accumulate = TRUE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多