代码之家  ›  专栏  ›  技术社区  ›  pachadotdev

数据帧中的最大滚动和

  •  1
  • pachadotdev  · 技术社区  · 6 年前

    我想在一段时间内获得尽可能大的金额。

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

    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。

    有没有办法计算最大移动/滚动和?

    换句话说: 如何计算最大可能的和

    第1天+第2天

    第一天+第二天+第三天

    第一天+第二天+第三天+第四天

    这将是预期的输出:

    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 回复  |  直到 6 年前
        1
  •  1
  •   Jilber Urbina    6 年前

    你是说这样的?

    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
    
        2
  •  1
  •   Jilber Urbina    6 年前

    我们可以使用 Reduce 要得到“逐个求和”的结果:

    > Reduce("+",data$units_in_store, accumulate = TRUE)[-1]
    [1] 13 11 12 11
    

    这是一种替代方案 cumsum 见@doviods答案。然后可以选择最大值。