我在运动队的 R 中有一个数据框
df
,其中包括每场比赛的 Season
、Date
和 Goals
列,如下所示:
Season Date Home Away Goals
1 2013 06/04/2013 Arsenal Chelsea 3
2 2013 06/04/2013 Tottenham Newcastle 5
3 2013 10/04/2013 Milan Rangers 4
4 2013 07/05/2013 Real Bayern 1
5 2013 07/05/2013 Juventus Inter 2
6 2013 07/06/2013 Barcelona Chelsea 1
7 2014 03/04/2014 Braga Benfica 3
8 2014 13/04/2014 Rangers Chelsea 1
9 2014 08/05/2014 Bayern Tottenham 0
10 2014 10/05/2014 Newcastle Braga 2
我想将这些数据分组为每个季节的月份并计算:
我的目标是获得一个像这样的新数据框:
Season month TotalGoalsMonth AvGoalsMonth AvGoalsSeason
1 2013 4 12 4.0 2.67
2 2013 5 3 1.5 2.67
3 2013 6 1 1.0 2.67
4 2014 4 4 2.0 1.50
5 2014 5 2 2.0 1.50
2013 赛季有第 4、5、6 个月。第 4 个月进行了 3 场比赛,总共打入 12 个进球(
TotalGoalsMonth
列)。每月平均目标是 12/3=4.0(AvGoalsMonth
栏)。第 5、6 个月也是如此,然后 2014 年季节重复,依此类推。
2013年总共进行了6场比赛,总共打入16个进球,因此2013赛季平均进球数为16 / 6 = 2.67(
AvGoalsSeason
栏)。然后重复 2014 年赛季,依此类推。
请解释如何在 R 中执行此操作。
将日期转换为 Date 类,从中提取月份。计算每个月的总进球数、平均进球数和比赛场数。
library(dplyr)
library(lubridate)
df %>%
mutate(Date = dmy(Date),
Month = month(Date)) %>%
summarise(TotalGoalsMonth = sum(Goals),
AvGoalsMonth = mean(Goals),
NumOfMatches = n(),
.by = c(Season, Month)) %>%
mutate(AvGoalsSeason = sum(TotalGoalsMonth)/sum(NumOfMatches), .by = Season)
# Season Month TotalGoalsMonth AvGoalsMonth NumOfMatches AvGoalsSeason
#1 2013 4 12 4.0 3 2.666667
#2 2013 5 3 1.5 2 2.666667
#3 2013 6 1 1.0 1 2.666667
#4 2014 4 4 2.0 2 1.500000
#5 2014 5 2 1.0 2 1.500000