Instrucciones: - Utiliza en la medida de lo posible los verbos de dplyr para manipular los datos. Utiliza read.csv y write.csv para las salidas de los datos. Accede a https://dplyr.tidyverse.org/ y consulta qué funciones podrían ser de utilidad, además de las vistas en clase.

  1. Implementa una función que reciba como parámetros la temporada y la liga y descargue el fichero en formato csv, renombrado a “temporada_liga.csv”. Por ejemplo: “1920_SP1.csv”, que se corresponde con la temporada 2019-2020 y la liga española primera división.

Seguiremos el formato de la web football-data para nombrar las ligas. Por el momento SP1 y SP2 son los nombres de la liga española en primera y segunda división. Los ficheros originales se encuentran en https://www.football-data.co.uk/spainm.php

library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.4     v dplyr   1.0.7
## v tidyr   1.1.4     v stringr 1.4.0
## v readr   2.0.2     v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
setwd(".../Practica_10")
descarga_liga <- function(anio_inicio_datos, liga, url_raiz, url_dest) {
  temp_inicio <- anio_inicio_datos # Defino el entero con el año de inicio de la temporada
  temp_fin <- temp_inicio + 1 # Sumamos uno para definir el año de fin
  temp_inicio_txt <- as.character(temp_inicio) #Pasamos a texto para utilizar el formato "21/22"
  temp_fin_txt <- as.character(temp_fin)
  temp_inicio_txt <- substring(temp_inicio_txt, 3, 4) # nos quedamos con los últimos 2 dígitos del año
  temp_fin_txt <- substring(temp_fin_txt, 3, 4)
  temp_txt <- paste(temp_inicio_txt, temp_fin_txt, sep="")
  url_read <- paste(url_raiz, "/", temp_txt, "/", liga, ".csv", sep="") # Ubicación exacta del fichero a leer
  datos <- read.csv(url_read) 
  dest <- paste(url_dest, "/", temp_txt, "_", liga, ".csv", sep="")
  write.csv(datos, file=dest)
}
  1. Utiliza la función anterior para descargar los archivos de primera y segunda española desde la temporada 2005-2006 hasta la presente.
url_raiz <- "https://www.football-data.co.uk/mmz4281" # Si descargamos desde la web
#url_raiz <- getwd() # Simular la descarga en local, con las carpetas previamente cargadas
url_dest <- getwd() # Descargamos todo en la misma carpeta
liga <- "SP1"
for(anio_inicio_datos in 2005:2021) {
  descarga_liga(anio_inicio_datos, liga, url_raiz, url_dest)
}
liga <- "SP2"
for(anio_inicio_datos in 2005:2021) {
  descarga_liga(anio_inicio_datos, liga, url_raiz, url_dest)
}
  1. Crea un data frame a partir de los datos que contenga: puntos (pts), partidos jugados (PJ), partidos ganados (PG), perdidos (PP), empatados (PE), goles a favor (GF), goles en contra (GC).
#Por comodidad y legibilidad del código, creo una función que procese los partidos, quedandome con las columnas útiles, agregando la temporada y asignando puntos y contando resultados:
procesar_partidos <- function(temporada, liga, url_raiz) {
  datos <- paste(url_raiz, "/")
  archivo <- paste(getwd(),"/", temporada, "_", liga, ".csv", sep="")
  datos_liga <- read.csv(archivo)
  datos_liga <- datos_liga %>%
    select(HomeTeam, AwayTeam, FTHG, FTAG, FTR, HTHG, HTAG, HTR) %>% #filtrar columnas útiles
    mutate(Temporada = temporada) %>% # agregar temporada
    select(Temporada, everything()) %>% # poner la temporada en la primera columna
    mutate(HPts = case_when(FTR == "H" ~ 3, FTR == "D" ~ 1, TRUE ~ 0)) %>% # Puntos local
    mutate(APts = case_when(FTR == "A" ~ 3, FTR == "D" ~ 1, TRUE ~ 0)) %>% # Puntos visitante
    mutate(HTW = (FTR=="H")*1) %>% # Ganados local
    mutate(HTD = (FTR=="D")*1) %>% # Empatados local
    mutate(HTL = (FTR=="A")*1) %>% # Perdidos local
    mutate(ATW = (FTR=="A")*1) %>% # Ganados visitante
    mutate(ATD = (FTR=="D")*1) %>% # Empatados visitante
    mutate(ATL = (FTR=="H")*1)  # Perdidos visitante
  return(datos_liga)
}
head(procesar_partidos("2122", "SP1", getwd()))
##   Temporada HomeTeam    AwayTeam FTHG FTAG FTR HTHG HTAG HTR HPts APts HTW HTD
## 1      2122 Valencia      Getafe    1    0   H    1    0   H    3    0   1   0
## 2      2122    Cadiz     Levante    1    1   D    0    1   A    1    1   0   1
## 3      2122 Mallorca       Betis    1    1   D    1    0   H    1    1   0   1
## 4      2122   Alaves Real Madrid    1    4   A    0    0   D    0    3   0   0
## 5      2122  Osasuna     Espanol    0    0   D    0    0   D    1    1   0   1
## 6      2122    Celta  Ath Madrid    1    2   A    0    1   A    0    3   0   0
##   HTL ATW ATD ATL
## 1   0   0   0   1
## 2   0   0   1   0
## 3   0   0   1   0
## 4   1   1   0   0
## 5   0   0   1   0
## 6   1   1   0   0
#Ahora obtendremos la clasificación mediante otra función que hará uso de la anterior:
clasificacion <- function(temporada, liga, url_raiz)
{
  partidos <- procesar_partidos(temporada, liga, url_raiz)
  #partidos <- partidos[1,] --> Probad la diferencia inner_join, left_join o full_join
  
  rank_local <- # Obtenemos el resumen de resultados como local
  partidos %>%
  group_by(HomeTeam) %>% 
  summarise(PJL = n(), PtsL = sum(HPts), PGL = sum(HTW), PEL = sum(HTD), PPL = sum(HTL), GFL = sum(FTHG), GCL = sum(FTAG)) %>%
  arrange(desc(PtsL))
  rank_local <- # Cambiamos el nombre "HomeTeam" por "Equipo"
  rank_local %>%
    rename(Equipo = HomeTeam)
  
  rank_visitante <- # Obtenemos el resumen de resultados como visitante
  partidos %>%
  group_by(AwayTeam) %>%
  summarise(PJV = n(), PtsV = sum(APts), PGV = sum(ATW), PEV = sum(ATD), PPV = sum(ATL), GFV = sum(FTAG), GCV = sum(FTHG)) %>%
  arrange(desc(PtsV))  
  rank_visitante <- # Cambiamos el nombre "AwayTeam" por "Equipo"
  rank_visitante %>%
    rename(Equipo = AwayTeam)
  
  rank_total <- 
  rank_local %>%
    full_join(rank_visitante, by=c("Equipo")) %>%
    mutate(across(everything(), ~replace_na(.x, 0))) %>%
    mutate(PJ = PJL+PJV) %>%
    mutate(Pts = PtsL + PtsV) %>%
    mutate(PG = PGL+PGV) %>%
    mutate(PE = PEL+PEV) %>%
    mutate(PP = PPL+PPV) %>%
    mutate(GF = GFL+GFV) %>%
    mutate(GC = GCL+GCV) 
}

Muestra un listado con la clasificación de la liga por puntos, de la temporada anterior y de la presente (hasta donde estén disponibles los datos). Guarda el resultado de cada listado en un fichero csv diferente para poder reutilizarlo.

res_2021 <- clasificacion("2021", "SP1", "getwd()") %>%
  select(Equipo, Pts, PJ, PG, PE, PP, GF, GC) %>%
  arrange(desc(Pts), desc(GF-GC))
res_2021
## # A tibble: 20 x 8
##    Equipo        Pts    PJ    PG    PE    PP    GF    GC
##    <chr>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 Ath Madrid     86    38    26     8     4    67    25
##  2 Real Madrid    84    38    25     9     4    67    28
##  3 Barcelona      79    38    24     7     7    85    38
##  4 Sevilla        77    38    24     5     9    53    33
##  5 Sociedad       62    38    17    11    10    59    38
##  6 Betis          61    38    17    10    11    50    50
##  7 Villarreal     58    38    15    13    10    60    44
##  8 Celta          53    38    14    11    13    55    57
##  9 Ath Bilbao     46    38    11    13    14    46    42
## 10 Granada        46    38    13     7    18    47    65
## 11 Osasuna        44    38    11    11    16    37    48
## 12 Cadiz          44    38    11    11    16    36    58
## 13 Valencia       43    38    10    13    15    50    53
## 14 Levante        41    38     9    14    15    46    57
## 15 Getafe         38    38     9    11    18    28    43
## 16 Alaves         38    38     9    11    18    36    57
## 17 Elche          36    38     8    12    18    34    55
## 18 Huesca         34    38     7    13    18    34    53
## 19 Valladolid     31    38     5    16    17    34    57
## 20 Eibar          30    38     6    12    20    29    52
write.csv(res_2021, "Clasif_2021_SP1.csv")

res_2122 <- clasificacion("2122", "SP1", "getwd()") %>%
  select(Equipo, Pts, PJ, PG, PE, PP, GF, GC) %>%
  arrange(desc(Pts), desc(GF-GC))
res_2122
## # A tibble: 20 x 8
##    Equipo        Pts    PJ    PG    PE    PP    GF    GC
##    <chr>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 Sociedad       28    13     8     4     1    19    10
##  2 Real Madrid    27    12     8     3     1    28    13
##  3 Sevilla        27    12     8     3     1    21     7
##  4 Ath Madrid     23    12     6     5     1    21    13
##  5 Betis          21    13     6     3     4    19    17
##  6 Vallecano      20    13     6     2     5    19    14
##  7 Osasuna        19    13     5     4     4    14    17
##  8 Ath Bilbao     18    12     4     6     2    11     8
##  9 Barcelona      17    12     4     5     3    19    15
## 10 Espanol        17    13     4     5     4    14    13
## 11 Valencia       17    13     4     5     4    21    20
## 12 Villarreal     15    12     3     6     3    14    12
## 13 Mallorca       15    13     3     6     4    13    19
## 14 Alaves         13    12     4     1     7     8    15
## 15 Celta          12    13     3     3     7    13    17
## 16 Cadiz          12    13     2     6     5    12    19
## 17 Granada        11    12     2     5     5    11    16
## 18 Elche          11    13     2     5     6    11    17
## 19 Getafe          6    13     1     3     9     6    19
## 20 Levante         6    13     0     6     7    12    25
write.csv(res_2122, "Clasif_2122_SP1.csv")
  1. Agrega las columnas necesarias para generar un clasificación de los resultados al descanso.
# creamos la función procesar al descanso para puntuar con HTR y no con FTR
procesar_partidos_descanso <- function(temporada, liga, url_raiz) {
  datos <- paste(url_raiz, "/")
  archivo <- paste(getwd(),"/", temporada, "_", liga, ".csv", sep="")
  datos_liga <- read.csv(archivo)
  datos_liga <- datos_liga %>%
    select(HomeTeam, AwayTeam, FTHG, FTAG, FTR, HTHG, HTAG, HTR) %>% #filtrar columnas útiles
    mutate(Temporada = temporada) %>% # agregar temporada
    select(Temporada, everything()) %>% # poner la temporada en la primera columna
    mutate(HPts = case_when(HTR == "H" ~ 3, HTR == "D" ~ 1, TRUE ~ 0)) %>% # Puntos local
    mutate(APts = case_when(HTR == "A" ~ 3, HTR == "D" ~ 1, TRUE ~ 0)) %>% # Puntos visitante
    mutate(HTW = (HTR=="H")*1) %>% # Ganados local
    mutate(HTD = (HTR=="D")*1) %>% # Empatados local
    mutate(HTL = (HTR=="A")*1) %>% # Perdidos local
    mutate(ATW = (HTR=="A")*1) %>% # Ganados visitante
    mutate(ATD = (HTR=="D")*1) %>% # Empatados visitante
    mutate(ATL = (HTR=="H")*1)  # Perdidos visitante
  return(datos_liga)
}
head(procesar_partidos_descanso("2122", "SP1", getwd()))
##   Temporada HomeTeam    AwayTeam FTHG FTAG FTR HTHG HTAG HTR HPts APts HTW HTD
## 1      2122 Valencia      Getafe    1    0   H    1    0   H    3    0   1   0
## 2      2122    Cadiz     Levante    1    1   D    0    1   A    0    3   0   0
## 3      2122 Mallorca       Betis    1    1   D    1    0   H    3    0   1   0
## 4      2122   Alaves Real Madrid    1    4   A    0    0   D    1    1   0   1
## 5      2122  Osasuna     Espanol    0    0   D    0    0   D    1    1   0   1
## 6      2122    Celta  Ath Madrid    1    2   A    0    1   A    0    3   0   0
##   HTL ATW ATD ATL
## 1   0   0   0   1
## 2   1   1   0   0
## 3   0   0   0   1
## 4   0   0   1   0
## 5   0   0   1   0
## 6   1   1   0   0
#Modificamos nuestra función clasificación para puntuar al descanso.

clasificacion <- function(temporada, liga, url_raiz, ht=FALSE)
{
  if(ht) {
    partidos <- procesar_partidos_descanso(temporada, liga, url_raiz)
  } else {
  partidos <- procesar_partidos(temporada, liga, url_raiz)
  }
  #partidos <- partidos[1,] --> Probad la diferencia inner_join, left_join o full_join
  
  rank_local <- # Obtenemos el resumen de resultados como local
  partidos %>%
  group_by(HomeTeam) %>% 
  summarise(PJL = n(), PtsL = sum(HPts), PGL = sum(HTW), PEL = sum(HTD), PPL = sum(HTL), GFL = sum(FTHG), GCL = sum(FTAG)) %>%
  arrange(desc(PtsL))
  rank_local <- # Cambiamos el nombre "HomeTeam" por "Equipo"
  rank_local %>%
    rename(Equipo = HomeTeam)
  
  rank_visitante <- # Obtenemos el resumen de resultados como visitante
  partidos %>%
  group_by(AwayTeam) %>%
  summarise(PJV = n(), PtsV = sum(APts), PGV = sum(ATW), PEV = sum(ATD), PPV = sum(ATL), GFV = sum(FTAG), GCV = sum(FTHG)) %>%
  arrange(desc(PtsV))  
  rank_visitante <- # Cambiamos el nombre "AwayTeam" por "Equipo"
  rank_visitante %>%
    rename(Equipo = AwayTeam)
  
  rank_total <- 
  rank_local %>%
    full_join(rank_visitante, by=c("Equipo")) %>%
    mutate(across(everything(), ~replace_na(.x, 0))) %>%
    mutate(PJ = PJL+PJV) %>%
    mutate(Pts = PtsL + PtsV) %>%
    mutate(PG = PGL+PGV) %>%
    mutate(PE = PEL+PEV) %>%
    mutate(PP = PPL+PPV) %>%
    mutate(GF = GFL+GFV) %>%
    mutate(GC = GCL+GCV) 
}
res_2122 <- clasificacion("2122", "SP1", getwd(), TRUE) %>%
  select(Equipo, Pts, PJ, PG, PE, PP, GF, GC) %>%
  arrange(desc(Pts), desc(GF-GC))
res_2122
## # A tibble: 20 x 8
##    Equipo        Pts    PJ    PG    PE    PP    GF    GC
##    <chr>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 Mallorca       24    13     6     6     1    13    19
##  2 Real Madrid    20    12     5     5     2    28    13
##  3 Sevilla        20    12     5     5     2    21     7
##  4 Betis          20    13     5     5     3    19    17
##  5 Espanol        19    13     5     4     4    14    13
##  6 Ath Madrid     18    12     5     3     4    21    13
##  7 Barcelona      18    12     5     3     4    19    15
##  8 Vallecano      17    13     4     5     4    19    14
##  9 Granada        17    12     5     2     5    11    16
## 10 Osasuna        16    13     3     7     3    14    17
## 11 Cadiz          16    13     4     4     5    12    19
## 12 Villarreal     15    12     3     6     3    14    12
## 13 Sociedad       14    13     2     8     3    19    10
## 14 Ath Bilbao     14    12     2     8     2    11     8
## 15 Elche          14    13     2     8     3    11    17
## 16 Getafe         14    13     3     5     5     6    19
## 17 Valencia       13    13     3     4     6    21    20
## 18 Levante        13    13     3     4     6    12    25
## 19 Alaves         12    12     2     6     4     8    15
## 20 Celta          11    13     1     8     4    13    17
  1. Agrega las columnas necesarias para generar una clasificación de los mejores equipos como locales y como visitantes.
res_2122_loc <- clasificacion("2122", "SP1", getwd()) %>%
  select(Equipo, PtsL, everything()) %>%
  arrange(desc(PtsL), desc(GFL-GCL))
res_2122_loc
## # A tibble: 20 x 22
##    Equipo       PtsL   PJL   PGL   PEL   PPL   GFL   GCL   PJV  PtsV   PGV   PEV
##    <chr>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 Vallecano      16     6     5     1     0    13     2     7     4     1     1
##  2 Sevilla        15     5     5     0     0    15     4     7    12     3     3
##  3 Barcelona      14     7     4     2     1    15     8     5     3     0     3
##  4 Espanol        14     7     4     2     1     9     4     6     3     0     3
##  5 Sociedad       14     6     4     2     0     5     1     7    14     4     2
##  6 Ath Madrid     12     6     3     3     0    10     4     6    11     3     2
##  7 Valencia       12     7     3     3     1    13     8     6     5     1     2
##  8 Real Madrid    11     5     3     2     0    13     4     7    16     5     1
##  9 Villarreal     11     6     3     2     1    11     6     6     4     0     4
## 10 Betis          11     7     3     2     2    12     9     6    10     3     1
## 11 Ath Bilbao     10     6     3     1     2     7     5     6     8     1     5
## 12 Mallorca       10     7     2     4     1     8     7     6     5     1     2
## 13 Alaves          9     7     3     0     4     5     9     5     4     1     1
## 14 Elche           7     6     1     4     1     6     6     7     4     1     1
## 15 Osasuna         6     7     1     3     3     4    10     6    13     4     1
## 16 Granada         5     5     1     2     2     6     7     7     6     1     3
## 17 Cadiz           4     7     0     4     3     4     9     6     8     2     2
## 18 Celta           4     7     1     1     5     6    11     6     8     2     2
## 19 Getafe          4     6     1     1     4     4     9     7     2     0     2
## 20 Levante         4     6     0     4     2     6    11     7     2     0     2
## # ... with 10 more variables: PPV <dbl>, GFV <dbl>, GCV <dbl>, PJ <dbl>,
## #   Pts <dbl>, PG <dbl>, PE <dbl>, PP <dbl>, GF <dbl>, GC <dbl>
res_2122_vis <- clasificacion("2122", "SP1", getwd()) %>%
  select(Equipo, PtsV, everything()) %>%
  arrange(desc(PtsV), desc(GFV-GCV))
res_2122_vis
## # A tibble: 20 x 22
##    Equipo       PtsV   PJL  PtsL   PGL   PEL   PPL   GFL   GCL   PJV   PGV   PEV
##    <chr>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 Real Madrid    16     5    11     3     2     0    13     4     7     5     1
##  2 Sociedad       14     6    14     4     2     0     5     1     7     4     2
##  3 Osasuna        13     7     6     1     3     3     4    10     6     4     1
##  4 Sevilla        12     5    15     5     0     0    15     4     7     3     3
##  5 Ath Madrid     11     6    12     3     3     0    10     4     6     3     2
##  6 Betis          10     7    11     3     2     2    12     9     6     3     1
##  7 Ath Bilbao      8     6    10     3     1     2     7     5     6     1     5
##  8 Celta           8     7     4     1     1     5     6    11     6     2     2
##  9 Cadiz           8     7     4     0     4     3     4     9     6     2     2
## 10 Granada         6     5     5     1     2     2     6     7     7     1     3
## 11 Valencia        5     7    12     3     3     1    13     8     6     1     2
## 12 Mallorca        5     7    10     2     4     1     8     7     6     1     2
## 13 Villarreal      4     6    11     3     2     1    11     6     6     0     4
## 14 Alaves          4     7     9     3     0     4     5     9     5     1     1
## 15 Vallecano       4     6    16     5     1     0    13     2     7     1     1
## 16 Elche           4     6     7     1     4     1     6     6     7     1     1
## 17 Barcelona       3     7    14     4     2     1    15     8     5     0     3
## 18 Espanol         3     7    14     4     2     1     9     4     6     0     3
## 19 Getafe          2     6     4     1     1     4     4     9     7     0     2
## 20 Levante         2     6     4     0     4     2     6    11     7     0     2
## # ... with 10 more variables: PPV <dbl>, GFV <dbl>, GCV <dbl>, PJ <dbl>,
## #   Pts <dbl>, PG <dbl>, PE <dbl>, PP <dbl>, GF <dbl>, GC <dbl>
  1. Crea una nueva columna con la diferencia de goles, otra con el ratio de goles a favor vs en contra.
res_2021 <- clasificacion("2021", "SP1", "getwd()") %>%
  select(Equipo, Pts, PJ, PG, PE, PP, GF, GC) %>%
  arrange(desc(Pts), desc(GF-GC)) %>%
  mutate(DG = GF-GC) %>%
  mutate(GF/GC)
res_2021
## # A tibble: 20 x 10
##    Equipo        Pts    PJ    PG    PE    PP    GF    GC    DG `GF/GC`
##    <chr>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl>
##  1 Ath Madrid     86    38    26     8     4    67    25    42   2.68 
##  2 Real Madrid    84    38    25     9     4    67    28    39   2.39 
##  3 Barcelona      79    38    24     7     7    85    38    47   2.24 
##  4 Sevilla        77    38    24     5     9    53    33    20   1.61 
##  5 Sociedad       62    38    17    11    10    59    38    21   1.55 
##  6 Betis          61    38    17    10    11    50    50     0   1    
##  7 Villarreal     58    38    15    13    10    60    44    16   1.36 
##  8 Celta          53    38    14    11    13    55    57    -2   0.965
##  9 Ath Bilbao     46    38    11    13    14    46    42     4   1.10 
## 10 Granada        46    38    13     7    18    47    65   -18   0.723
## 11 Osasuna        44    38    11    11    16    37    48   -11   0.771
## 12 Cadiz          44    38    11    11    16    36    58   -22   0.621
## 13 Valencia       43    38    10    13    15    50    53    -3   0.943
## 14 Levante        41    38     9    14    15    46    57   -11   0.807
## 15 Getafe         38    38     9    11    18    28    43   -15   0.651
## 16 Alaves         38    38     9    11    18    36    57   -21   0.632
## 17 Elche          36    38     8    12    18    34    55   -21   0.618
## 18 Huesca         34    38     7    13    18    34    53   -19   0.642
## 19 Valladolid     31    38     5    16    17    34    57   -23   0.596
## 20 Eibar          30    38     6    12    20    29    52   -23   0.558
  1. Representa gráficamente el promedio de goles por partido de cada temporada (eje X, la temporada y eje y el promedio)
# Primero vectorizamos las temporadas:
inicio <- substring(as.character(2005:2021), 3,4)
fin <- substring(as.character(2005:2021 + 1),3,4)
temporadas <- paste(inicio, fin, sep="")

inicio <- substring(as.character(2005:2021), 3,4)
fin <- substring(as.character(2005:2021 + 1),3,4)
temporadas <- paste(inicio, fin, sep="")
#Unimos todas las temporadas de primera y segunda en un data frame.
#Etiquetamos ambas temporadas en la columna agregada "Div"

# Bucle de unión de partidos procesados de 1ª
partidos1 <- procesar_partidos(temporadas[1], "SP1", getwd()) 
i = 2
while(i <= length(temporadas)) {
  partidos1 <- procesar_partidos(temporadas[i], "SP1", getwd()) %>%
    union(partidos1)
  i = i+1
}
partidos1 <- partidos1 %>% mutate(Div = "SP1")

# Bucle de unión de partidos procesados de 2ª
partidos2 <- procesar_partidos(temporadas[1], "SP2", getwd()) 
i = 2
while(i <= length(temporadas)) {
  partidos2 <- procesar_partidos(temporadas[i], "SP2", getwd()) %>%
    union(partidos2)
  i = i+1
}
partidos2 <- partidos2 %>% mutate(Div = "SP2")
#Tras etiquetar ambos data frame, ya se pueden unir:
partidos12 <- partidos1 %>% union_all(partidos2)

Finalmente, representamos gráficamente el promedio de goles por temporada, diferenciando SP1 y SP2

partidos12 %>%
  group_by(Div, Temporada) %>%
  summarise(avg = mean(FTHG+FTAG, na.rm = TRUE)) %>%
  arrange(Temporada) %>%
  ggplot(aes(x = Temporada, y=avg, color=Div))+
  geom_point(size = 3)
## `summarise()` has grouped output by 'Div'. You can override using the `.groups` argument.