La idea de esta presnetcaión es mostrar algunas de las bondades de las funciones *_join y cómo asociarlas con las otras funciones que fuimos viendo. Para eso primero vamos a cargar los paquetes necesarios y crear tres planillas de datos a modo de ejemplo.

library(tidyr)
library(dplyr)

datos_barcos <- data.frame(barco = c("Angelescu", "Mar Argentino", "Holmberg"), 
                           id = c("aq", "ma (remix)", "jo"),
                           eslora = c(12.5, 15.2, 17.1), 
                           esgaviota = c(5.1, 6.1, 8.8))

datos_zonas <- data.frame(id = rep(c("aq", "ma (remix)", "jo"), 2),
                          fecha = rep(2020:2021, each = 3),
                          zona = c("Atacama", "Mendoza", "Salta", "Mar", "Otro mar", "Agua"))

datos_lances <- data.frame(id = rep(c("aq", "ma (remix)", "jo"), each = 10),
                           fecha = rep(2020:2021, each = 5),
                           lance = rep(1:10, 3),
                           peso_bicho_1 = rnorm(30, mean = 10, sd = 2),
                           peso_bicho_2 = runif(30, 0, 200))

Veamos de qué tratan estas planillas

datos_barcos
##           barco         id eslora esgaviota
## 1     Angelescu         aq   12.5       5.1
## 2 Mar Argentino ma (remix)   15.2       6.1
## 3      Holmberg         jo   17.1       8.8
datos_zonas
##           id fecha     zona
## 1         aq  2020  Atacama
## 2 ma (remix)  2020  Mendoza
## 3         jo  2020    Salta
## 4         aq  2021      Mar
## 5 ma (remix)  2021 Otro mar
## 6         jo  2021     Agua
str(datos_lances)
## 'data.frame':    30 obs. of  5 variables:
##  $ id          : chr  "aq" "aq" "aq" "aq" ...
##  $ fecha       : int  2020 2020 2020 2020 2020 2021 2021 2021 2021 2021 ...
##  $ lance       : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ peso_bicho_1: num  6.78 14.8 10.12 9.6 11.38 ...
##  $ peso_bicho_2: num  115.8 71 150.3 69.2 137.8 ...

Supongamos que queremos saber el peso total de la captura por zona de pesca y año lo primero que hay que hacer es unir las planillas de zonas y lances

datos_zonas %>%
  left_join(datos_lances)
## Joining with `by = join_by(id, fecha)`
##            id fecha     zona lance peso_bicho_1 peso_bicho_2
## 1          aq  2020  Atacama     1     6.783397    115.81656
## 2          aq  2020  Atacama     2    14.804040     71.00180
## 3          aq  2020  Atacama     3    10.121093    150.27597
## 4          aq  2020  Atacama     4     9.595875     69.16875
## 5          aq  2020  Atacama     5    11.382570    137.77477
## 6  ma (remix)  2020  Mendoza     1     9.038314     11.57425
## 7  ma (remix)  2020  Mendoza     2     8.716042    184.73436
## 8  ma (remix)  2020  Mendoza     3    11.229860     49.31108
## 9  ma (remix)  2020  Mendoza     4     5.621291    107.82109
## 10 ma (remix)  2020  Mendoza     5    11.422426     96.11369
## 11         jo  2020    Salta     1    10.491708     94.02218
## 12         jo  2020    Salta     2    11.870939     59.97539
## 13         jo  2020    Salta     3     9.840300     78.55433
## 14         jo  2020    Salta     4    10.195596     92.87365
## 15         jo  2020    Salta     5     6.600590    111.17163
## 16         aq  2021      Mar     6    12.455999    112.04919
## 17         aq  2021      Mar     7     9.231532    107.80617
## 18         aq  2021      Mar     8     9.890225     37.07800
## 19         aq  2021      Mar     9    12.672247    121.76289
## 20         aq  2021      Mar    10    10.520511     99.36127
## 21 ma (remix)  2021 Otro mar     6    11.592734     69.87955
## 22 ma (remix)  2021 Otro mar     7    11.136519     55.62677
## 23 ma (remix)  2021 Otro mar     8    10.926832     78.31320
## 24 ma (remix)  2021 Otro mar     9    11.450832    156.88109
## 25 ma (remix)  2021 Otro mar    10    13.614410    162.50380
## 26         jo  2021     Agua     6     9.196833    168.67392
## 27         jo  2021     Agua     7    10.197457     10.56395
## 28         jo  2021     Agua     8    10.649699     47.80125
## 29         jo  2021     Agua     9     8.758272    168.59424
## 30         jo  2021     Agua    10    11.004099    144.50435

Funciona como queremos, ahora sigamos Calculemos la suma de los pesos por lance como nos dijo Kechu

datos_zonas %>%
  left_join(datos_lances) %>%
  mutate(peso_total = peso_bicho_1 + peso_bicho_2)
## Joining with `by = join_by(id, fecha)`
##            id fecha     zona lance peso_bicho_1 peso_bicho_2 peso_total
## 1          aq  2020  Atacama     1     6.783397    115.81656  122.59995
## 2          aq  2020  Atacama     2    14.804040     71.00180   85.80584
## 3          aq  2020  Atacama     3    10.121093    150.27597  160.39707
## 4          aq  2020  Atacama     4     9.595875     69.16875   78.76463
## 5          aq  2020  Atacama     5    11.382570    137.77477  149.15734
## 6  ma (remix)  2020  Mendoza     1     9.038314     11.57425   20.61256
## 7  ma (remix)  2020  Mendoza     2     8.716042    184.73436  193.45040
## 8  ma (remix)  2020  Mendoza     3    11.229860     49.31108   60.54094
## 9  ma (remix)  2020  Mendoza     4     5.621291    107.82109  113.44239
## 10 ma (remix)  2020  Mendoza     5    11.422426     96.11369  107.53611
## 11         jo  2020    Salta     1    10.491708     94.02218  104.51389
## 12         jo  2020    Salta     2    11.870939     59.97539   71.84633
## 13         jo  2020    Salta     3     9.840300     78.55433   88.39463
## 14         jo  2020    Salta     4    10.195596     92.87365  103.06924
## 15         jo  2020    Salta     5     6.600590    111.17163  117.77222
## 16         aq  2021      Mar     6    12.455999    112.04919  124.50519
## 17         aq  2021      Mar     7     9.231532    107.80617  117.03771
## 18         aq  2021      Mar     8     9.890225     37.07800   46.96823
## 19         aq  2021      Mar     9    12.672247    121.76289  134.43513
## 20         aq  2021      Mar    10    10.520511     99.36127  109.88179
## 21 ma (remix)  2021 Otro mar     6    11.592734     69.87955   81.47229
## 22 ma (remix)  2021 Otro mar     7    11.136519     55.62677   66.76329
## 23 ma (remix)  2021 Otro mar     8    10.926832     78.31320   89.24003
## 24 ma (remix)  2021 Otro mar     9    11.450832    156.88109  168.33192
## 25 ma (remix)  2021 Otro mar    10    13.614410    162.50380  176.11821
## 26         jo  2021     Agua     6     9.196833    168.67392  177.87075
## 27         jo  2021     Agua     7    10.197457     10.56395   20.76140
## 28         jo  2021     Agua     8    10.649699     47.80125   58.45095
## 29         jo  2021     Agua     9     8.758272    168.59424  177.35251
## 30         jo  2021     Agua    10    11.004099    144.50435  155.50845

Vamos bien, ahora nos queda agrupar por zona y calcular la suma total

datos_zonas %>%
  left_join(datos_lances) %>%
  mutate(peso_total = peso_bicho_1 + peso_bicho_2) %>%
  group_by(zona) %>% 
  summarise(total = sum(peso_total))
## Joining with `by = join_by(id, fecha)`
## # A tibble: 6 × 2
##   zona     total
##   <chr>    <dbl>
## 1 Agua      590.
## 2 Atacama   597.
## 3 Mar       533.
## 4 Mendoza   496.
## 5 Otro mar  582.
## 6 Salta     486.

Supongamos ahora que queremos evaluar si la captura total está relacionada con la eslora, para eso necesitamos los datos de antes pero con la información del barco del que provinieron los datos

datos_zonas %>%
  left_join(datos_lances) %>%
  mutate(peso_total = peso_bicho_1 + peso_bicho_2) %>%
  group_by(zona, id) %>% 
  summarise(total = sum(peso_total))
## Joining with `by = join_by(id, fecha)`
## `summarise()` has grouped output by 'zona'. You can override using the
## `.groups` argument.
## # A tibble: 6 × 3
## # Groups:   zona [6]
##   zona     id         total
##   <chr>    <chr>      <dbl>
## 1 Agua     jo          590.
## 2 Atacama  aq          597.
## 3 Mar      aq          533.
## 4 Mendoza  ma (remix)  496.
## 5 Otro mar ma (remix)  582.
## 6 Salta    jo          486.

Ya teniendo eso podemos unir con la planilla de barcos

datos_zonas %>%
  left_join(datos_lances) %>%
  mutate(peso_total = peso_bicho_1 + peso_bicho_2) %>%
  group_by(zona, id) %>% 
  summarise(total = sum(peso_total)) %>%
  left_join(datos_barcos)
## Joining with `by = join_by(id, fecha)`
## `summarise()` has grouped output by 'zona'. You can override using the
## `.groups` argument.
## Joining with `by = join_by(id)`
## # A tibble: 6 × 6
## # Groups:   zona [6]
##   zona     id         total barco         eslora esgaviota
##   <chr>    <chr>      <dbl> <chr>          <dbl>     <dbl>
## 1 Agua     jo          590. Holmberg        17.1       8.8
## 2 Atacama  aq          597. Angelescu       12.5       5.1
## 3 Mar      aq          533. Angelescu       12.5       5.1
## 4 Mendoza  ma (remix)  496. Mar Argentino   15.2       6.1
## 5 Otro mar ma (remix)  582. Mar Argentino   15.2       6.1
## 6 Salta    jo          486. Holmberg        17.1       8.8

La planilla ya estaría lista para hacer los análisis pero si quisiéramos hacer una tabla con esto, hay columnas que no nos sirven

datos_zonas %>%
  left_join(datos_lances) %>%
  mutate(peso_total = peso_bicho_1 + peso_bicho_2) %>%
  group_by(zona, id) %>% 
  summarise(total = sum(peso_total)) %>%
  left_join(datos_barcos) %>%
  select(barco, zona, eslora, total)
## Joining with `by = join_by(id, fecha)`
## `summarise()` has grouped output by 'zona'. You can override using the
## `.groups` argument.
## Joining with `by = join_by(id)`
## # A tibble: 6 × 4
## # Groups:   zona [6]
##   barco         zona     eslora total
##   <chr>         <chr>     <dbl> <dbl>
## 1 Holmberg      Agua       17.1  590.
## 2 Angelescu     Atacama    12.5  597.
## 3 Angelescu     Mar        12.5  533.
## 4 Mar Argentino Mendoza    15.2  496.
## 5 Mar Argentino Otro mar   15.2  582.
## 6 Holmberg      Salta      17.1  486.

Para que quede prolijo lo podemos ordenar por barco

datos_zonas %>%
  left_join(datos_lances) %>%
  mutate(peso_total = peso_bicho_1 + peso_bicho_2) %>%
  group_by(zona, id) %>% 
  summarise(total = sum(peso_total)) %>%
  left_join(datos_barcos) %>%
  select(barco, zona, eslora, total) %>% 
  arrange(barco)
## Joining with `by = join_by(id, fecha)`
## `summarise()` has grouped output by 'zona'. You can override using the
## `.groups` argument.
## Joining with `by = join_by(id)`
## # A tibble: 6 × 4
## # Groups:   zona [6]
##   barco         zona     eslora total
##   <chr>         <chr>     <dbl> <dbl>
## 1 Angelescu     Atacama    12.5  597.
## 2 Angelescu     Mar        12.5  533.
## 3 Holmberg      Agua       17.1  590.
## 4 Holmberg      Salta      17.1  486.
## 5 Mar Argentino Mendoza    15.2  496.
## 6 Mar Argentino Otro mar   15.2  582.

El problema es que a último momento nos avisan que los datos de Atacama, Salta y Mendoza no serían confiables

datos_zonas %>%
  left_join(datos_lances) %>%
  mutate(peso_total = peso_bicho_1 + peso_bicho_2) %>%
  group_by(zona, id) %>% 
  summarise(total = sum(peso_total)) %>%
  left_join(datos_barcos) %>%
  select(barco, zona, eslora, total) %>% 
  arrange(barco) %>% 
  filter(zona %in% c("Mar", "Otro mar", "Agua"))
## Joining with `by = join_by(id, fecha)`
## `summarise()` has grouped output by 'zona'. You can override using the
## `.groups` argument.
## Joining with `by = join_by(id)`
## # A tibble: 3 × 4
## # Groups:   zona [3]
##   barco         zona     eslora total
##   <chr>         <chr>     <dbl> <dbl>
## 1 Angelescu     Mar        12.5  533.
## 2 Holmberg      Agua       17.1  590.
## 3 Mar Argentino Otro mar   15.2  582.

Gracias Kechu, nos ahorraste horas de Excel