在r中,我使用RcppRoll滚动求和函数
我有一个存储在列向量中的序列作为
0 1 0 1 1 1 1 0 1 0 1 0
我希望3个周期的滚动总和与右对齐。
1, 2, 2, 3, 3, 2, 2 , 1, 2, 1, 1, 0
相反,我得到了
1, 2, 2, 3, 3, 2, 2 , 1, 2, 1, NA, NA
这是因为一旦窗口到达序列的末尾只有2或1个值,它就不会求和。
这是部分应该解决的吗?如何将最后n-1个句点与部分或折叠窗口相加?
我目前最好的想法是在序列中添加n个值,以便实际数据中的窗口始终为满,然后删除NA的后期计算。
这有点复杂,因为这些值按日期排序,因此在末尾添加日期需要一些逻辑条件,因为总和将应用于dplyr groupby数据。
这是一个例子
library(RcppRoll)
c <- as.data.frame(c(0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0))
colnames(c) <- ("data")
c$sum <- roll_sum(c$data, n = 3, weights = NULL, fill = NA, align = "right", na.rm = TRUE, partial = TRUE)
返回
NA NA 1 2 2 3 3 2 2 1 2 1
当
0 1 1 2 2 3 3 2 2 1 2 1
是理想的。
这是数据嵌套在一个组中的方式,一旦NA问题得到解决就可以处理。我按顺序排序数据,但问题仍然存在。
rolling_data <- rolling_svu %>%
group_by(TEAM, DATE) %>%
summarise(sumML = sum(LOAD)) %>%
complete(DATE = full_seq(GAME_DATE,1)) %>%
arrange(desc(DATE)) %>%
mutate(game_played = ifelse(is.na(sumML), 0, 1),
scheduled_next_7 = roll_sum(game_played, n = forward_window_period, weights = NULL, fill = NA, align = "right", na.rm = TRUE, partial = TRUE)) %>%
arrange(TEAM) %>%
filter(!is.na(sumML)) %>%
select(TEAM, DATE, scheduled_next_7 )
rolling_data$GAME_DATE <- as_date(rolling_sportvu_team$GAME_DATE)
答案 0 :(得分:0)
动物园套餐运作良好: 库(动物园) rollapply(df1 $ data,3,sum,partial = TRUE,align =&#39; right&#39;)