滚动窗口RccpRoll - 序列值的结尾不是NA

时间:2016-09-11 17:03:14

标签: r

在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)

1 个答案:

答案 0 :(得分:0)

动物园套餐运作良好:     库(动物园)     rollapply(df1 $ data,3,sum,partial = TRUE,align =&#39; right&#39;)