如果值在 r 中变为负数,则重置 cumsum [英] resetting cumsum if value goes to negative in r
问题描述
ve <- c(17, -9, 9, -17, 17, -17, 11, -9, 16, -18, 17, 0, 0, -18, 17, 0, 0, -17, 14, -14, 17, -2, 0, -15, 9, -9, 17, -16, 16, -17, 17, -17, 17, -17, 17, -17, 17, -8, 7, -16, 17, -14, 14, -10, 10, -16, 16, -10, 10, -12, 12, -11, 11, -17, 17, -17, 17, -9, 8, -17, 17, -17, 17, -16, 16, -17, 17, -8, 8, -9, 9, -17, 17, -17, 17, -13, 13, -10, 7, -10, 13, -16, 17, -13, 13, -13, 13, -9, 8, -17, 17, -10, 9, -17, 17, -17, 17, -16, 16, -10, 10, -15, 15, -14, 14, -14, 15, -13, 13, -9, 9, -13, 13, -12, 12, -10, 9, -11, 12, -8, 7, -10, 10, -9, 9, -11, 11, -9, 9, -7, 7, -12, 11, -11, 12, -11, 11, -14, 14, -13, 13, -10, 10, -13, 13, -17, 17, -7, 7, -17, 17, -17, 17, -14, 14, NA)
df <- data.frame(ve = ve, calc = 0)
我需要计算列 calc 中的 cumsum,但它需要重置为零并在其值为负数时重新开始..我已经尝试了几个条件,但它并没有真正起作用......
I need to calculate cumsum in column calc, but it needs to reset to zero and start again whenever its value goes negative.. I've tried several conditions but it's not really working...
另外,是否有可能在 dplyr 中实现这一点?我是 dplyr 的新手,每当我需要使用依赖值时发现它有点困难..
Also, is it possible to achieve this in dplyr? I'm new to dplyr and find it somewhat difficult whenever I need to use dependent value..
感谢您的帮助!
应该是这样的..
ve calc
1 17 17
2 -9 8
3 9 17
4 -17 0
5 17 17
6 -17 0
7 11 11
8 -9 2
9 16 18
10 -18 0
11 17 17
12 0 17
13 0 17
14 -18 0
15 17 17
如果您看到第 14 行和第 15 行,正常的 cumsum 将是 -1 和 16但我希望它重置为 0 而不是 -1 并继续 cumsum,因此下一个将是 17
If you see row 14 and 15, with the normal cumsum it would be -1 and 16 but I want it to reset to 0 instead of -1 and continue cumsum, hence the next would be 17
推荐答案
我们可以replace
将NA值替换为0并使用cumsum
We can replace
the NA values with 0 and use cumsum
library(dplyr)
df1 <- df %>%
group_by(grp = cumsum(lag(cumsum(replace(ve, is.na(ve), 0)) < 0, default = TRUE))) %>%
mutate(calc = cumsum(replace(ve, is.na(ve), 0)), calc = replace(calc, calc < 0, 0)) %>%
ungroup() %>%
select(-grp)
head(df1, 15)
# A tibble: 15 x 2
# ve calc
# <dbl> <dbl>
# 1 17 17
# 2 -9 8
# 3 9 17
# 4 -17 0
# 5 17 17
# 6 -17 0
# 7 11 11
# 8 -9 2
# 9 16 18
#10 -18 0
#11 17 17
#12 0 17
#13 0 17
#14 -18 0
#15 17 17
这篇关于如果值在 r 中变为负数,则重置 cumsum的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!