Cumsum с критериями в R - PullRequest
0 голосов
/ 23 мая 2018

Я хочу выполнить этот превосходный маневр в 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/

Как получить совокупную сумму на основе условия

Условная сумма с перезапуском

1 Ответ

0 голосов
/ 23 мая 2018

Циклическая (и менее быстрая) альтернатива cumsum равна Reduce(`+`, x, accumulate = TRUE).Однако этот подход Reduce можно затем изменить на сумму накопления:

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