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