【发布时间】: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/
【问题讨论】:
标签: r loops if-statement dplyr cumsum