对未来实例使用 rollsum 函数(forward rollsum)
Using rollsum function for future instances (forward rollsum)
我想应用前向 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
假设您按日期对数据进行排序,您是否可以这样做:
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)
我想应用前向 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
假设您按日期对数据进行排序,您是否可以这样做:
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)