r - 在 R 中展开时间序列数据
问题描述
我有一个 NHL 球员数据集,其中包括每个球员在每个赛季的进球数。我计算球员职业生涯的总进球数,以确定“跑步”前 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
我想扩展数据集,以便当球员结束职业生涯时,他们仍保留在数据集中。例如,Wayne Gretzky 于 1999 年退休,但我希望在数据集中为 Gretzky 输入所有后续年份的最终目标总数。最终产品看起来像这样:
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 年。有没有简单的方法可以做到这一点?
解决方案
我们可以通过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
#....
推荐阅读
- sql - 如何在sql中提取和旋转
- python - 根据其他列中的值计算值的百分比
- regex - HaProxy:从标头中获取字符串
- kubernetes - kuberenetes 中 liveness 探针中的 curl 和 grep 命令
- c# - 如何将属性从一个对象复制到另一个具有不同值的对象C#
- php - 在 phpunit 中进行一些测试之前重新加载数据库
- javascript - rest api 使用 javascript 授权
- php - 获取 Google Drive 中所有文件夹的列表 - Google Drive API
- javascript - 为什么相关的帖子小部件只出现在页脚中,而不出现在侧边栏中?
- azure - 在 Azure API for FHIR 中搜索资源时的默认排序是什么?