Развернуть данные временных рядов в R - PullRequest
1 голос
/ 11 ноября 2019

У меня есть набор данных игроков НХЛ, который включает в себя количество голов для каждого игрока за каждый сезон, в котором играл этот игрок. Я рассчитываю общее количество голов за карьеру игрока, чтобы определить «бегущих» 10 лучших игроков.

toy_data <- data.frame(player=c("gretzky","gretzky","gretzky","gretzky","gretzky","gretzky","gretzky","gretzky","gretzky","gretzky"),
                       goal_total=c(5,10,15,20,25,30,35,40,45,50),
                       goals=c(5,5,5,5,5,5,5,5,5,5),
                       year=c(1990,1991,1992,1993,1994,1995,1996,1997,1998,1999))

player goal_total goals year
1  gretzky          5     5 1990
2  gretzky         10     5 1991
3  gretzky         15     5 1992
4  gretzky         20     5 1993
5  gretzky         25     5 1994
6  gretzky         30     5 1995
7  gretzky         35     5 1996
8  gretzky         40     5 1997
9  gretzky         45     5 1998
10 gretzky         50     5 1999

Я хочу расширить набор данных так, чтобы, когда игроки заканчивают свою карьеру, они остаются в наборе данных. Например, Уэйн Гретцки вышел на пенсию в 1999 году, но я хочу, чтобы Гретцки вошел в набор данных за все последующие годы с его окончательной целью. Конечный продукт будет выглядеть примерно так:

player goal_total goals year
1  gretzky          5     5 1990
2  gretzky         10     5 1991
3  gretzky         15     5 1992
4  gretzky         20     5 1993
5  gretzky         25     5 1994
6  gretzky         30     5 1995
7  gretzky         35     5 1996
8  gretzky         40     5 1997
9  gretzky         45     5 1998
10 gretzky         50     5 1999
11 gretzky         50     0 2000
12 gretzky         50     0 2001
13 gretzky         50     0 2002
...

и так далее до 2019 года. Есть ли простой способ сделать это?

1 Ответ

1 голос
/ 11 ноября 2019

Мы можем достичь этого с complete и fill с tidyr

library(dplyr)
library(tidyr)

toy_data %>%
  group_by(player) %>%
  complete(year = min(year):2019, fill = list(goals = 0)) %>%
  fill(goal_total) 


#    player year goal_total goals
#1  gretzky 1990          5     5
#2  gretzky 1991         10     5
#3  gretzky 1992         15     5
#4  gretzky 1993         20     5
#5  gretzky 1994         25     5
#6  gretzky 1995         30     5
#7  gretzky 1996         35     5
#8  gretzky 1997         40     5
#9  gretzky 1998         45     5
#10 gretzky 1999         50     5
#11 gretzky 2000         50     0
#12 gretzky 2001         50     0
#....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...