我希望在一段时间内获得最大的金额。
例如,我有一个数据框,其中存储有某种产品的单位:
library(tidyverse)
data <- tibble(
date = paste("Day", 1:5),
units_in_store = c(10,3,-2,1,-1)
)
cumsum(data$units_in_store)
将返回11,但在这种情况下,最大可能的总和为13,并将这些值一一求和将为13、11、12和11。
是否可以计算最大移动/滚动总和?
换句话说:如何使用
来计算最大的和第一天+第二天
第一天+第二天+第三天
第一天+第二天+第三天+第四天
等?
这将是预期的输出:
data %>% mutate(units2 = something(units_in_store))
# A tibble: 5 x 3
date units_in_store units2
<chr> <dbl> <dbl>
1 Day 1 10 13
2 Day 2 3 13
3 Day 3 -2 13
4 Day 4 1 13
5 Day 5 -1 13
答案 0 :(得分:1)
您的意思是这样的吗?
data<-mutate(data,units2=max(cumsum(units_in_store)))
输出:
date units_in_store units2
<chr> <dbl> <dbl>
1 Day 1 10 13
2 Day 2 3 13
3 Day 3 -2 13
4 Day 4 1 13
5 Day 5 -1 13
答案 1 :(得分:1)
我们可以使用Reduce
来获得“一个一加总”的结果:
> Reduce("+",data$units_in_store, accumulate = TRUE)[-1]
[1] 13 11 12 11
这是cumsum
的替代方法,请参见@doviod的答案。然后您可以选择最大值。