通过乘以列对 R 中的数据帧进行分组并对分组数据执行计算

问题描述 投票:0回答:1

我在运动队的 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

我想将这些数据分组为每个季节的月份并计算:

  1. 每月所有比赛的总进球数
  2. 每月每场比赛的平均进球数
  3. 每个赛季每场比赛的平均进球数
  4. 还显示额外的列,说明每个季节的每个月

我的目标是获得一个像这样的新数据框:

  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 中执行此操作。

r dataframe aggregate grouping
1个回答
0
投票

将日期转换为 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
© www.soinside.com 2019 - 2024. All rights reserved.