Я хочу выполнить этот превосходный маневр в R для списка значений :
= 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)
Результат из Excel, который я хочу создать в R:
result <- c(0.007084, 0.007121, 0.000000, 0.000000, 0.000033, 0.000499, 0.001666, 0.002030)
d <- data.frame(values, result)
Кумулятивная сумма должна быть выполнена, но если сумма равнаотрицательный результат должен быть нулевым.Поэтому мне нужна функция cumsum, которая сбрасывается в ноль, если сумма отрицательная.Однако в следующей строке сумма должна быть основана на 0,000000 и 0,000033, что приводит к повторному росту суммы в следующей строке с суммой 0,000033 и 0,000467 (= 0,000499).
Достаточно ли я объяснил?
Попробовал разные подходы без успеха на основе этих:
fx lapply, dplyr, lookup ....
library (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)
Следуетбыть настолько простым, но по какой-то причине я не могу заставить его работать ...
сбросить cumsum, если значение становится отрицательным в r
https://www.dataquest.io/blog/control-structures-in-r-using-loops-and-if-else-statements/
Как получить совокупную сумму на основе условия
Условная сумма с перезапуском