Ниже приведен скрипт для получения статистики о людях и получения скользящего среднего за последние 6 дней.Я хотел бы, чтобы самые близкие даты сегодня имели большее влияние, чем более поздние даты.
Если это возможно:
- ближайшие 2 события по дате будут иметь вес .50 (50%)
- 2-ые ближайшие даты будут иметьвес .30 (30%)
- самый дальний будет иметь вес .20 (20%).
Есть два способа создания скользящего среднего ниже one_df
и two_df
, я использую первый в моем реальном сценарии, но я добавил второй в случае, если было бы легче записать ввесовые функции.
library(dplyr)
library(lubridate)
# Create DataFrame
df<- data.frame(name=c('CAREY.FAKE','CAREY.FAKE','CAREY.FAKE','CAREY.FAKE','CAREY.FAKE','CAREY.FAKE','CAREY.FAKE',
'JOHN.SMITH','JOHN.SMITH','JOHN.SMITH','JOHN.SMITH','JOHN.SMITH','JOHN.SMITH','JOHN.SMITH',
'JEFF.JOHNSON','JEFF.JOHNSON','JEFF.JOHNSON','JEFF.JOHNSON','JEFF.JOHNSON','JEFF.JOHNSON','JEFF.JOHNSON',
'SARA.JOHNSON','SARA.JOHNSON','SARA.JOHNSON','SARA.JOHNSON','SARA.JOHNSON','SARA.JOHNSON','SARA.JOHNSON'
),
GA=c(3,2,1,1,2,3,20,3,2,1,1,2,3,20,3,2,1,1,2,3,20,3,2,1,1,2,3,20),
SV=c(3,2,1,1,2,3,20,3,2,1,1,2,3,20,3,2,1,1,2,3,20,3,2,1,1,2,3,20),
GF=c(3,2,1,1,2,3,20,3,2,1,1,2,3,20,3,2,1,1,2,3,20,3,2,1,1,2,3,20),
SA=c(3,2,1,1,2,3,20,3,2,1,1,2,3,20,3,2,1,1,2,3,20,3,2,1,1,2,3,20),
date=c("10/20/2016","10/19/2016","10/18/2016","10/17/2016","10/16/2016","10/15/2016","10/14/2016",
"10/20/2016","10/19/2016","10/18/2016","10/17/2016","10/16/2016","10/15/2016","10/14/2016",
"10/20/2016","10/19/2016","10/18/2016","10/17/2016","10/16/2016","10/15/2016","10/14/2016",
"10/20/2016","10/19/2016","10/18/2016","10/17/2016","10/16/2016","10/15/2016","10/14/2016"
),
stringsAsFactors = FALSE)
one_df <- df %>%
group_by(name) %>%
arrange(name, mdy(date)) %>%
summarise_at(2:5, funs(mean(tail(., 6))))
two_df <- df %>%
group_by(name) %>%
top_n(mdy(date), n = 6) %>%
summarise_at(2:5, mean)
DF:
name GA SV GF SA date
CAREY.FAKE 3 3 3 3 10/20/2016
CAREY.FAKE 2 2 2 2 10/19/2016
CAREY.FAKE 1 1 1 1 10/18/2016
CAREY.FAKE 1 1 1 1 10/17/2016
CAREY.FAKE 2 2 2 2 10/16/2016
CAREY.FAKE 3 3 3 3 10/15/2016
CAREY.FAKE 20 20 20 20 10/14/2016
JOHN.SMITH 3 3 3 3 10/20/2016
JOHN.SMITH 2 2 2 2 10/19/2016
JOHN.SMITH 1 1 1 1 10/18/2016
JOHN.SMITH 1 1 1 1 10/17/2016
JOHN.SMITH 2 2 2 2 10/16/2016
JOHN.SMITH 3 3 3 3 10/15/2016
JOHN.SMITH 20 20 20 20 10/14/2016
JEFF.JOHNSON 3 3 3 3 10/20/2016
JEFF.JOHNSON 2 2 2 2 10/19/2016
JEFF.JOHNSON 1 1 1 1 10/18/2016
JEFF.JOHNSON 1 1 1 1 10/17/2016
JEFF.JOHNSON 2 2 2 2 10/16/2016
JEFF.JOHNSON 3 3 3 3 10/15/2016
JEFF.JOHNSON 20 20 20 20 10/14/2016
SARA.JOHNSON 3 3 3 3 10/20/2016
SARA.JOHNSON 2 2 2 2 10/19/2016
SARA.JOHNSON 1 1 1 1 10/18/2016
SARA.JOHNSON 1 1 1 1 10/17/2016
SARA.JOHNSON 2 2 2 2 10/16/2016
SARA.JOHNSON 3 3 3 3 10/15/2016
SARA.JOHNSON 20 20 20 20 10/14/2016
РЕЗУЛЬТАТЫ:
name GA SV GF SA
CAREY.FAKE 2 2 2 2
JEFF.JOHNSON 2 2 2 2
JOHN.SMITH 2 2 2 2
SARA.JOHNSON 2 2 2 2
ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ:
name GA SV GF SA
CAREY.FAKE 2.05 2.05 2.05 2.05
JEFF.JOHNSON 2.05 2.05 2.05 2.05
JOHN.SMITH 2.05 2.05 2.05 2.05
SARA.JOHNSON 2.05 2.05 2.05 2.05