我想应用转发rollsum
,即不是给我过去实例的总和(或中位数),而是想计算未来实例的总和。
我知道函数rollsum
(以及rollmedian
,rollapply
),但它们只适用于过去的实例。至少,我还没有找到有关如何做的信息。
示例:
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
答案 0 :(得分:4)
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
而以下对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是第一个成分之后的3个成分,1。
答案 1 :(得分:2)
假设您按日期订购数据,则无法执行以下操作:
df %>%
group_by( someFactorColumn) %>% # optional grouping variable
arrange(-dateItHappened) %>%
mutate( forwardsum = cumsum( valYouCareAbout) %>%
arrange( dateItHappened)
答案 2 :(得分:1)
我们也可以使用roll_sum
library(RcppRoll)
library(RcppRoll)
roll_sum(df1$price,4, align='left', fill=NA)