带有 R 中标准的 Cumsum

Cumsum with criteria in R

我想在 值列表 上在 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)

应该很简单,但由于某些原因我不能让它工作...

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

Conditional cumsum with reset

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

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