我正在使用工作负载数据来计算3个指标-Daily
,7-Day rolling
(过去7天的总和)28-Day Rolling Average
(过去28天的总和/ 4)。
我已经可以用Daily
进行计算,但是我需要7-Day rolling
和28-Day Rolling Average
并遇到了一些麻烦。我每个日期都有17个唯一的ID(日期从2018-08-09
到2018-12-15
)。
library(dplyr)
library(tidyr)
library(tidyverse)
library(zoo)
Post_Practice <- read.csv("post.csv", stringsAsFactors = FALSE)
Post_Data <- Post_Practice[, 1:3]
DailyLoad <- Post_Data %>%
group_by(Date, Name) %>%
transmute(Daily = sum(DayLoad)) %>%
distinct(Date, Name, .keep_all = TRUE) %>%
mutate('7-day' = rollapply(Daily, 7, sum, na.rm = TRUE, partial = TRUE))
输入:
Date Name DayLoad
2018-08-09 Athlete 1 273.92000
2018-08-09 Athlete 2 351.16000
2018-08-09 Athlete 3 307.97000
2018-08-09 Athlete 1 434.20000
2018-08-09 Athlete 2 605.92000
2018-08-09 Athlete 3 432.87000
输入看起来一直到2018-12-15
。一些日期包含多个数据(如上),而某些日期只有一个条目。
此代码产生7-day
列,但显示的数字与Daily
相同,即:
Date Name Daily 7-day
<chr> <chr> <dbl> <dbl>
1 2018-08-09 Athlete 1 708. 708.
2 2018-08-09 Athlete 2 957. 957.
3 2018-08-09 Athlete 3 741. 741.
目标是使决赛桌(即7天后)看起来像这样:
Date Name Daily 7-day
<chr> <chr> <dbl> <dbl>
1 2018-08-15 Athlete 1 413. 3693.
2 2018-08-15 Athlete 2 502. 4348.
3 2018-08-15 Athlete 3 490. 4007.
其中Daily
是该特定日期的总和,而7-Day
是该特定唯一ID的最后7个日期的总和。
答案 0 :(得分:1)
rollsum的帮助文件说:
rollmean和rollsum的默认方法不处理输入 包含NA。
使用rollapplyr(x, width, sum, na.rm = TRUE)
从总和中排除输入中的NA。注意r
末尾的rollapplyr
,以指定右对齐。
还请注意,如果您想在开头加上部分和而不是NA,则可以使用partial=TRUE
参数。