Подвижна 7-дневна сума, групирана по дата и уникален идентификатор

Използвам данни за работното натоварване, за да изчисля 3 показателя - Daily, 7-Day rolling (сума от последните 7 дни) 28-Day Rolling Average (сума от последните 28 дни/4).

Успях да изчисля с Daily, но имам нужда от моите 7-Day rolling и 28-Day Rolling Average и имам проблеми. Имам 17 уникални идентификатора за всяка дата (датите варират от 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 е сборът от последните 7 дати за този конкретен уникален идентификатор.


person Tyler Friedrich    schedule 27.02.2019    source източник
comment
Това не ми е ясно. Откъде идва 2018-08-09? Три не са 7 дати, така че какво се има предвид, като се вземе подвижната сума от 7 дни? Как се отнасят числата в очаквания изход към входа?   -  person G. Grothendieck    schedule 28.02.2019


Отговори (1)


Помощният файл за rollsum казва:

Методите по подразбиране на rollmean и rollsum не обработват входове, които съдържат NA.

Използвайте rollapplyr(x, width, sum, na.rm = TRUE), за да изключите NA във входа от сумата. Обърнете внимание на r в края на rollapplyr, за да укажете дясно подравняване.

Също така имайте предвид, че аргументът partial=TRUE може да се използва, ако искате частични суми в началото, а не NA.

person G. Grothendieck    schedule 27.02.2019
comment
Редактиран код по-горе, за да се показва с помощта на rollapplyr. Моята колона 7-day вече просто показва същата стойност като моята колона Daily вместо 7-дневната сума за това лице - person Tyler Friedrich; 27.02.2019
comment
Въпросът показва само изхода, но не и входа. Всички въпроси към SO трябва да имат пълни минимални и проверими примери на код. Може би грешката е, че сте групирали по дата, така че да има само един ред на група. - person G. Grothendieck; 27.02.2019
comment
Надявам се редакциите ми по-горе да са по-пълни. По същество всяка отделна дата ще има свой собствен вход, но това, с което се боря, е да намеря 7-дневна подвижна сума за всеки спортист. - person Tyler Friedrich; 27.02.2019