Chapitre 6 Manipuler plusieurs tables

6.1 Concepts généraux

Le package {dplyr} possède également plusieurs fonctions permettant de travailler sur deux tables. On va pouvoir regrouper ces fonctions en plusieurs catégories de manipulations :

  • pour fusionner des informations de deux tables entre elles : jointures transformantes,
  • pour sélectionner des observations d’une table en fonction de celles présentes dans une autre table : jointures filtrantes,
  • pour traiter deux tables ayant les mêmes colonnes et sélectionner sur celles-ci des observations de l’une et l’autre : opérations ensemblistes,
  • des manipulations visant à additionner deux tables ensembles : assemblages.

6.2 Principaux exemples de jointure

Dans la capture ci-dessus, les opérations de jointure supposent que la colonne x1 est présente dans a et b.

Voici quelques exemples détaillant les principaux cas rencontrés :

# jointure avec des noms de colonnes différentes pour la clé
# `colonne_c` est une colonne de data_a et `colonne_d` est une colonne de data_b
left_join(data_a, data_b, by = c("colonne_c" = "colonne_d"))

# jointure sur deux colonnes
# `colonne_e` et `colonne_f` sont des colonnes de data_a et de data_b
left_join(data_a, data_b, by = c("colonne_e", "colonne_f"))

# jointure sur deux colonnes avec noms différents
# `colonne_g`et `colonne_i` sont des colonnes de data_a, `colonne_h` et `colonne_j` sont des colonnes de data_b
left_join(data_a, data_b, by = c("colonne_g" = "colonne_h", "colonne_i" = "colonne_j"))

6.3 Paramétrage du suffixe pour des colonnes présentes dans les deux tables

Dans le cas où des colonnes (hors jointure) sont présentes dans data_a et data_b, ces colonnes seront suffixées par :

  • .x pour les colonnes provenant de data_a
  • .y pour les colonnes provenant de data_b

Il est possible de modifier ces suffixes en passant le paramètre suffix = c("_a", "_b") au moment de la jointure.

left_join(data_a, data_b, by = c("colonne_c" = "colonne_d"), suffix = c("_a", "_b"))

6.4 Animations de Garrick Abenduie

Les animations proviennent de : https://www.garrickadenbuie.com/project/tidyexplain/

6.4.1 Inner join

6.4.2 Left join

6.4.3 Pivot longuer / Pivot wider

6.5 Exercice 5

Dans les données FormationPreparationDesDonnees.RData, chaque analyse est effectuée à partir d’un prélèvement, lui-même réalisé au niveau d’une station.

  • Reconstituer le dataframe exercice qui rassemble les données contenues dans les tables analyse, prelevement et station grâce à des jointures. Il faut partir de la table analyse et faire des jointures

  • calculer le nombre d’analyses réalisées sur des molécules (identifiables par leur code_parametre) et décrites dans le référentiel parametre ;

  • produire une liste des code_parametre associés à des analyses mais absents du référentiel ;

  • produire une table des analyses “orphelines”, c’est-à-dire qui ne correspondent à aucun prélèvement.

Résultats attendus :

Résultat attendu pour les jointures entre analayse, prelevement et station

## Rows: 153,497
## Columns: 22
## $ code_analyse           <int> 5186581, 280131, 1576225, 799894, 472800, 27671…
## $ code_laboratoire       <dbl> NA, 292, NA, NA, 292, NA, NA, NA, NA, NA, NA, N…
## $ code_prelevement       <int> 37593, 7715, 15517, 9566, 8332, 26792, 35625, 1…
## $ code_parametre         <dbl> 1216, 1668, 1185, 1217, 1907, 1945, 1673, 1234,…
## $ code_fraction_analysee <int> 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,…
## $ resultat_analyse       <dbl> 0.007, 0.050, 0.040, 0.050, 0.260, 0.020, 0.010…
## $ code_remarque          <int> 10, 2, 2, 2, 1, 10, 10, 10, 10, 10, 10, 10, 2, …
## $ limite_detection       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ limite_quantification  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ code_intervenant       <fct> NA, 104, NA, NA, 104, NA, NA, 53, NA, 44, 49, 4…
## $ code_reseau            <fct> OSUR, OSUR, FREDON, OSUR, OSUR, OSUR, OSUR, ARS…
## $ code_station           <chr> "04153800", "04130000", "04132500", "04214000",…
## $ date_prelevement       <chr> "2014-09-16", "2003-08-05", "2008-09-01", "2007…
## $ code_support           <int> NA, 3, NA, NA, 3, NA, NA, 3, NA, 3, 3, 3, NA, N…
## $ libelle_station        <chr> "MOZEE à CHANTONNAY", "MAYENNE à DAON", "MAYENN…
## $ date_creation          <chr> "1900-01-01", "1900-01-01", "1900-01-01", "1900…
## $ source                 <chr> "AELB", "AELB", "AELB", "AELB", "AELB", "AELB",…
## $ code_masse_eau         <chr> "GR1950", "GR0460c", "GR0460c", "GR0121", "GR04…
## $ code_entite_hydro      <chr> "N3036200", "M---0090", "M---0090", "J78-0300",…
## $ code_troncon_hydro     <chr> "N3036200", "M3620090", "M3910090", "J7800300",…
## $ code_commune           <chr> "85051", "53089", "49214", "44036", "53017", "5…
## $ annee                  <dbl> 2014, 2003, 2008, 2007, 2005, 2006, 2013, 2009,…

Résultat attendu pour le nombre d’analyses réalisées sur des molécules (code_parametre) présentes dans le référentiel parametre :

## [1] 194382

Résultat attendu pour la liste des code_parametre associés à des analyses mais absents du référentiel :

##   [1]  1261  1206  1673  1234  1686  1757  1666  1149  1865  1888  1225  1830
##  [13]  1506  1136  1218  1199  1664  7097  1913  1680  5526  1235  1533  1266
##  [25]  1155  1877  1215  1209  1126  1208  1189  9052  1526  1256  1903  1905
##  [37]  1866  1895  1171  1130  2027  2046  1104  1233  1193  2057  1890  1173
##  [49]  1148  1150  1103  2737  2047  1490  1464  1101  1254  1698  1540  1870
##  [61]  2912  1287  1159  1142  1257  1213  1812  1700  1194  1432  2546  6260
##  [73]  1289  1697  5537  1694  2074  1699  1951  2751  6398  1806  1228  2678
##  [85]  1814  1832  2806  2015  1809  1682  1742  3159  2807  1214  1402  1670
##  [97]  5921     0  1210  1276  1153  2028  1094  1968  6483  1124  1119  1891
## [109]  1127  1139  1954  1503  1523  1887  1147  1522  1743  1972  1966  1763
## [121]  2012  2976  1259  1701  1102  1231  1940  1238  2024  5416  1860  5760
## [133]  1501  1942  6824  1280  1502  2951  1112  1975  1943  1336  1711  1716
## [145]  1930  1764  1655  1283  1615  1976  1953  7057  2010  1805  2950  2930
## [157]  1546  2565  5488  1880  1774  1684  1525  1959  1616  1592  1587  2769
## [169]  2545  2750  2069  5638  2664  1702  1720  1538  1636  2984  5581  2913
## [181]  6261  6856  1091  1875  7500  1090  1649  1614  1548  7345  2872  2987
## [193]  1250 12143  2021  1274  1629  1465  2609  3209  1642  2748  1643  2744
## [205]  1969  1869  7342  1591  1251  1647  2749  1116  2986  2066  1469  1388
## [217]  2081  1245  2889  5545  1628  1648  2919  1595  1613  1957  1590  1955
## [229]  1089  2929  2536  1160  3283  1282  1387  1458  7522  1241  3160  2732
## [241]  1275  1651  1382  1106  1115 12098  1588  1468  1612  2916  1624  1594
## [253] 12099  1032  1627  2733  1243  2734  1921  1273  2915  6384  1272  1117
## [265]  1278  1653  1731  1586  1396  2887  1286  2770  5499  1305  1471  1650
## [277]  1625  1645  1593  2868  1486  1730  1161  7150  2590  2032  1626  1589
## [289]  1249  1386  1242  2537  1244  1644  1497  1622  2568  1577  1641

Résultat attendu pour la table des analyses “orphelines”, c’est-à-dire ne correspondent à aucun prélèvement :

## Rows: 84,535
## Columns: 9
## $ code_analyse           <int> 3854590, 1812211, 3124130, 4245401, 3684301, 38…
## $ code_laboratoire       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ code_prelevement       <int> 32031, 17208, 28512, 33302, 31986, 32146, 17640…
## $ code_parametre         <dbl> 2025, 1261, 2045, 2978, 2018, 1190, 1206, 1911,…
## $ code_fraction_analysee <int> 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,…
## $ resultat_analyse       <dbl> 2e-02, 5e-02, 1e-02, 1e+01, 1e-02, 2e-02, 2e-02…
## $ code_remarque          <int> 10, 10, 10, 10, 133, 10, 10, 10, 10, 10, 10, 10…
## $ limite_detection       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ limite_quantification  <dbl> 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, …