数据帧中的最大滚动总和

时间:2018-08-09 19:44:22

标签: r dplyr tidyr

我希望在一段时间内获得最大的金额。

例如,我有一个数据框,其中存储有某种产品的单位:

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

2 个答案:

答案 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的答案。然后您可以选择最大值。