为另一个数据框中的每个唯一行创建数据框
Create data frame for each unique row in another data frame
为了完成我的研究生课程作业,我被要求从英超联赛结果数据集中提取数据(位于 here)。我非常接近完成,但在最后两个输出方面需要帮助。
我们必须创建一个可以接收两个参数的函数,一个日期和一个季节。该函数必须 return 一个数据框,其中包含该日期相应季节的 table。它必须包括胜负,主场战绩,客场战绩等。我唯一没弄清楚的是W/L连胜和最近10场比赛的结果。
这是初始数据集的示例:
e.Date e.HomeTeam e.AwayTeam e.FTHG e.FTAG e.FTR
1 2015-08-08 Bournemouth Aston Villa 0 1 A
2 2015-08-08 Chelsea Swansea 2 2 D
3 2015-08-08 Everton Watford 2 2 D
4 2015-08-08 Leicester Sunderland 4 2 H
5 2015-08-08 Man United Tottenham 1 0 H
我的计划是为每个俱乐部整理主场和客场数据,然后将它们合并在一起,然后再进行分析以找到连胜和最近 10 场比赛的结果。
我将数据处理成这样:
HomeTeam FTR Date freq
1 Arsenal L 2015-08-09 1
2 Arsenal D 2015-08-24 1
3 Arsenal W 2015-09-12 1
4 Aston Villa L 2015-08-14 1
5 Aston Villa L 2015-09-19 1
6 Aston Villa D 2015-08-29 1
现在我有点迷路了。我的想法是 运行 某种循环(for?ddply?data.table?)为每个俱乐部创建一个数据框,其中包含他们的结果,然后再次循环以进行任何计算以获得所需的结果变量(连续和最后 10 个)并以某种方式将它们推回主数据框,我在其中放置所有其他输出。
我不想直接被告知答案,因为这对我自己学习很重要。但是,如果有人能指出我正确的方向,那就太好了。非常感谢。
我创建了一些虚拟数据只是为了演示一些命令并可能给您一些想法。
set.seed(321)
dat <- data.frame(team = sample(letters[1:3], 20, replace=TRUE),
season = rep("season1", 20),
time = rnorm(20),
win_loss = sample(c("win", "loss"), 20, replace=TRUE))
问题 1. 找到 win/loss 连胜
看看下面的 rle
函数示例
# 1. find wl streak of team 'a'
tmp <- dat[dat$team == "a", ]
tmp <- tmp[order(tmp$time), ]
> tmp
team season time win_loss
19 a season1 -1.12032742 loss
14 a season1 -1.07223880 loss
16 a season1 0.09500072 loss
3 a season1 0.18832552 loss
8 a season1 0.42033257 loss
4 a season1 2.44325982 win
# shows runs of 5 consecutive losses, then 1 consecutive win
rle(tmp$win_loss == "win")
Run Length Encoding
lengths: int [1:2] 5 1
values : logi [1:2] FALSE TRUE
post rle
How can I count runs in a sequence?
上的一篇非常有用的文章
问题 2. 最后 3 个结果
我颠倒了time
的顺序,然后选择了前3个结果。
# 2. find last 3 matches for team 'b'
tmp <- dat[dat$team == "b", ]
tmp <- tmp[rev(order(tmp$time)), ]
> tmp[1:3, ]
team season time win_loss
11 b season1 0.9172555 loss
9 b season1 0.5775845 win
7 b season1 0.4560691 loss
为了完成我的研究生课程作业,我被要求从英超联赛结果数据集中提取数据(位于 here)。我非常接近完成,但在最后两个输出方面需要帮助。
我们必须创建一个可以接收两个参数的函数,一个日期和一个季节。该函数必须 return 一个数据框,其中包含该日期相应季节的 table。它必须包括胜负,主场战绩,客场战绩等。我唯一没弄清楚的是W/L连胜和最近10场比赛的结果。
这是初始数据集的示例:
e.Date e.HomeTeam e.AwayTeam e.FTHG e.FTAG e.FTR
1 2015-08-08 Bournemouth Aston Villa 0 1 A
2 2015-08-08 Chelsea Swansea 2 2 D
3 2015-08-08 Everton Watford 2 2 D
4 2015-08-08 Leicester Sunderland 4 2 H
5 2015-08-08 Man United Tottenham 1 0 H
我的计划是为每个俱乐部整理主场和客场数据,然后将它们合并在一起,然后再进行分析以找到连胜和最近 10 场比赛的结果。
我将数据处理成这样:
HomeTeam FTR Date freq
1 Arsenal L 2015-08-09 1
2 Arsenal D 2015-08-24 1
3 Arsenal W 2015-09-12 1
4 Aston Villa L 2015-08-14 1
5 Aston Villa L 2015-09-19 1
6 Aston Villa D 2015-08-29 1
现在我有点迷路了。我的想法是 运行 某种循环(for?ddply?data.table?)为每个俱乐部创建一个数据框,其中包含他们的结果,然后再次循环以进行任何计算以获得所需的结果变量(连续和最后 10 个)并以某种方式将它们推回主数据框,我在其中放置所有其他输出。
我不想直接被告知答案,因为这对我自己学习很重要。但是,如果有人能指出我正确的方向,那就太好了。非常感谢。
我创建了一些虚拟数据只是为了演示一些命令并可能给您一些想法。
set.seed(321)
dat <- data.frame(team = sample(letters[1:3], 20, replace=TRUE),
season = rep("season1", 20),
time = rnorm(20),
win_loss = sample(c("win", "loss"), 20, replace=TRUE))
问题 1. 找到 win/loss 连胜
看看下面的 rle
函数示例
# 1. find wl streak of team 'a'
tmp <- dat[dat$team == "a", ]
tmp <- tmp[order(tmp$time), ]
> tmp
team season time win_loss
19 a season1 -1.12032742 loss
14 a season1 -1.07223880 loss
16 a season1 0.09500072 loss
3 a season1 0.18832552 loss
8 a season1 0.42033257 loss
4 a season1 2.44325982 win
# shows runs of 5 consecutive losses, then 1 consecutive win
rle(tmp$win_loss == "win")
Run Length Encoding
lengths: int [1:2] 5 1
values : logi [1:2] FALSE TRUE
post rle
How can I count runs in a sequence?
问题 2. 最后 3 个结果
我颠倒了time
的顺序,然后选择了前3个结果。
# 2. find last 3 matches for team 'b'
tmp <- dat[dat$team == "b", ]
tmp <- tmp[rev(order(tmp$time)), ]
> tmp[1:3, ]
team season time win_loss
11 b season1 0.9172555 loss
9 b season1 0.5775845 win
7 b season1 0.4560691 loss