对未来实例使用 rollsum 函数(forward rollsum)

Using rollsum function for future instances (forward rollsum)

我想应用前向 rollsum,即,我不想给我过去实例的总和(或中位数),而是想计算未来实例的总和。

我知道函数 rollsum(和 rollmedianrollapply),但它们只适用于过去的实例。至少,我还没有找到关于如何做的信息。

示例:

price  = c(c5,5,8,2,6,2,6,6,6,0,7,0,3,8,9,9)    
past   = rollsum(price, 4, align='right',fill=NA)    
future = c(21,18,16,20,2018,19,13,10,18,20,29,rep(NA,4))
price past future
  5   NA     21
  5   NA     18
  8   NA     16
  2   20     20
  6   21     20
  2   18     18
  6   16     19
  6   20     13
  6   20     10
  0   18     18
  7   19     20
  0   13     29
  3   10     NA
  8   18     NA
  9   20     NA
  9   29     NA

假设您按日期对数据进行排序,您是否可以这样做:

df %>%
    group_by( someFactorColumn) %>% # optional grouping variable
    arrange(-dateItHappened) %>%
    mutate( forwardsum = cumsum( valYouCareAbout) %>%
    arrange( dateItHappened)

align 参数控制这个。例如,通过指定 align = "left" 我们得到这个:

library(zoo)

rollsum(1:6, 3, align = "left", fill = NA)
## [1]  6  9 12 15 NA NA

输出中的6是1+2+3,输出中的9是2+3+4,等等。最后两个元素是NA,因为没有3个未来元素。

如果您使用 rollapply,则可以使用更多的灵活性。例如,这与上面相同:

rollapply(1:6, 3, sum, align = "left", fill = NA)
## [1]  6  9 12 15 NA NA

而下面是 AFTER 之后的 3 个分量的总和,但不包括当前分量(列表的元素是从当前位置开始使用的偏移量,其中 0 表示当前位置,1 表示下一个位置,等等 --前面的位置可以使用负数)。

rollapply(1:6, list(1:3), sum, fill = NA)
## [1]  9 12 15 NA NA NA

因此 9 是 2+3+4,因为 2、3、4 是第一个分量 1 之后的 3 个分量。

我们也可以使用 library(RcppRoll)

中的 roll_sum
library(RcppRoll)
roll_sum(df1$price,4, align='left', fill=NA)