class: center, middle, inverse, title-slide # R : des premiers pas au modèle linéaire ## Manipulation de données ### Marie-Pierre Etienne ###
https://marieetienne.github.io/premierspas/
### Mars 2021 --- name: data # les données dans R --- template: data ## Structuration des données Les données sont stockées dans des objets de type `data.frame` (ou des généralisations de ce type d'objets). C'est un tableau dans lequel - 1 ligne correspond à une mesure (un individu statistique) - 1 colonne correspond à une variable -- ### Exemple ```r gvt_dta <- data.frame(Nom = c("Dupond-Moretti", "Le Drian", "Pompili"), Prenom = c("Eric", "Jean-Yves", "Barbara"), Sexe = c("H", "H", "F"), Age = c(60,74,46), Dpt_Naissance =c(59,56, 62)) gvt_dta ``` ``` ## Nom Prenom Sexe Age Dpt_Naissance ## 1 Dupond-Moretti Eric H 60 59 ## 2 Le Drian Jean-Yves H 74 56 ## 3 Pompili Barbara F 46 62 ``` Le plus souvent ce tableau est importé depuis fichier externe. --- name: importation # Importation de données --- template: importation ## Bonnes pratiques pour les fichiers - Préférer un format `csv`, éviter les formats propriétaires `xlsx` - Ne mettre que les données dans le fichier, (pas de calculs, de grpahiques ou autres) - Eviter les accents, espaces et caractères spéciaux dans les noms de fichier et les noms de variables - Garder une trace de toutes les opérations de pré traitement des données (typiquement dans un fichier `RMarkdown` --- template: importation ## Importer un fichier en mode interactif - File - Import Dataset - From Text (base) - choix du fichier - File - Import Dataset - From Text (readr) - choix du fichier -- ### Illustration - Télécharger le fichier `SamaresEq.txt` disponible sur [https://marieetienne.github.io/datasets/SamaresEq.txt](https://marieetienne.github.io/datasets/SamaresEq.txt) - Importation du fichier `SamaresEq.txt` dans la variable `SamaresEq_base`. Il est de classe `data.frame`. ```r class(SamaresEq_base) ``` ``` ## [1] "data.frame" ``` - Importation du même fichier `SamaresEq.txt` avec l'option From text (readr) dans la variable `SamaresEq_readr`. ```r class(SamaresEq_readr) ``` ``` ## [1] "spec_tbl_df" "tbl_df" "tbl" "data.frame" ``` Il est de classe `data.frame` mais aussi tibble tibble_dataframe etc .... --- template: importation ## Importer un fichier en mode interactif ### Exercice Refaire la manipulation avec les fichiers * [https://marieetienne.github.io/datasets/growth_data.txt](https://marieetienne.github.io/datasets/growth_data.txt) * [https://marieetienne.github.io/datasets/Manchots.csv](https://marieetienne.github.io/datasets/Manchots.csv) -- Cette pratique a le défaut de ne pas être directement reproductible. On souhaite privilégier, un code écrit, .care[ reproductible]. --- template: importation ## Importer un fichier en ligne de commande ### Avec les fonctions de base ```r mon_fichier <- "https://marieetienne.github.io/datasets/SamaresEq.txt" SamaresEq_base <- read.table(file = mon_fichier, sep = " ", header = TRUE, dec = '.') head(SamaresEq_base, n=3) ``` ``` ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## 1 4 Gornies 6.3 1 11.0 0.73816 0.427 2.31502 18.5 ## 2 4 Gornies 6.3 1 15.0 0.69958 0.489 2.15873 18.5 ## 3 4 Gornies 6.3 1 14.6 0.75847 0.444 2.27595 18.5 ``` - `file` indique le nom complet du fichier (potentiellement avec le chemin d'accès) - `sep` décrit le type de séparateur utilisé dans le fichier - `dec` décrit le signe pour les décimales (utile pour les fichiers en Français) -- ### Avec les fonctions de readr ```r SamaresEq_readr <- read_delim(file = mon_fichier, delim = " ") SamaresEq_readr ``` - `file` indique le nom complet du fichier (potentiellement avec le chemin d'accès) - `delim` décrit le type de séparateur utilisé dans le fichier --- template: importation ## Importer un fichier en ligne de commande ### Exercice - Importer le jeu de données [vin](http://factominer.free.fr/livre/vins.csv) - Créer un fichier `RMarkdown` nommé `Formation_R_exercices.Rmd` et insérer le code pour créer le tableau `vins_base` contenant le jeu de données [vin](http://factominer.free.fr/livre/vins.csv) en utilisant la commande `read.table`. - Insérer le code pour créer le tableau `vins_readr` contenant le jeu de données [vin](http://factominer.free.fr/livre/vins.csv) en utilisant la commande `read_delim` du package `readr`. --- template: importation ## Importer un fichier en ligne de commande ### Solution - Importer le jeu de données [vin](http://factominer.free.fr/livre/vins.csv) ```r vins_base <- read.table(file = 'http://factominer.free.fr/livre/vins.csv', sep = ';', header = TRUE, encoding = 'latin1') ``` -- * Créer un fichier `RMarkdown` nommé `Formation_R_exercices.Rmd` et insérer le code pour créer le tableau `vins_base` contenant le jeu de données [vin](http://factominer.free.fr/livre/vins.csv) en utilisant la commande `read.table` + New File -- R Markdown + Modifier auteur et titre + save as `Formation_R_exercices.Rmd` * Insérer le code pour créer le tableau `vins_readr` contenant le jeu de données [vin](http://factominer.free.fr/livre/vins.csv) en utilisant la commande `read_delim` du package `readr`. ```r library(readr) vins_readr <- vins <- read_delim("http://factominer.free.fr/livre/vins.csv", delim = ";", escape_double = FALSE, locale = locale(encoding = "latin1"), trim_ws = TRUE) ``` ``` ## Warning: Missing column names filled in: 'X1' [1] ``` --- template: importation ## Créer un projet Il faut indiquer le chemin précis du fichier si il est présent sur notre ordinateur, ce qui peut être pénible. Pour un fichier dans le répertoire `Mes Documents` de Windows, il faut indiquer à `R` l'endroit par le chemin du type `C:/Users/.....` (on peut le voir en faisant SHIFT + clic droit sur le nom du fichier). Le projet permet de simplifier l'accès au fichier. -- ### Exemple * Créer un nouveau projet Manipulation_data. * Ajouter le fichier `SamaresEq.txt` dans le répertoire du projet ```r read.table('SamaresEq.txt`, sep = ' ') ``` Aide mémoire pour la procédure d'importation [ici](https://marieetienne.github.io/h_import_data.html). --- template: importation ## Vérifier l'importation * Cliquer sur la variable contenant le jeu de données dans l'explorateur ( éviter pour des fichiers longs) * Afficher le fichier dans son ensemble ( éviter pour des fichiers longs) ```r SamaresEq_base ``` -- * Afficher les premières ou dernières lignes ```r head(SamaresEq_base, n = 2) ``` ``` ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## 1 4 Gornies 6.3 1 11 0.73816 0.427 2.31502 18.5 ## 2 4 Gornies 6.3 1 15 0.69958 0.489 2.15873 18.5 ``` ```r tail(SamaresEq_base, n = 3) ``` ``` ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## 2378 5 StLaurent 11.3 29 41.6 1.00891 0.56836 2.40750 26 ## 2379 5 StLaurent 11.3 29 35.3 0.94044 0.58594 2.29955 26 ## 2380 5 StLaurent 11.3 29 26.7 0.76706 0.48735 2.18422 26 ``` --- template: importation ## Vérifier l'importation Dans le cas d'objet `tibble` obtenu avec l'importation du package `readr`, l'affichage du tableau ne donne que les premières lignes ```r SamaresEq_readr ``` ``` ## # A tibble: 2,380 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 ## # … with 2,370 more rows ``` --- template: importation ## Sauver un jeu de données Lorsqu'on aura manipulé/modifié un jeu de données on peut vouloir sauver le résultat ### En fichier csv ```r write_csv(SamaresEq_base, file = 'samares_sauve.csv') ``` -- ### Sous forme compressée ```r save(list= c("SamaresEq_base"), file = 'samares_compress.RData') ``` -- ### Lire un fichier RData ```r load('samares_RDA.RData') ``` -- ### Lire des données fournies avec un package ```r # install.packages('palmerpenguins') library(palmerpenguins) data(penguins) ``` --- template: importation ## Importation d'un jeu de données à l'aide une requête SQL (base de données) - Connexion à une base SQL. ```r library(RODBC) # Liste les tables de la base de données connectée sqlTables(connect_base, tableType = "TABLE") # Liste les champs de la table DonneesTotales sqlColumns(connect_base, sqtable = "DonneesTotales") ``` - Executer une requête sur la base ```r # execute une requete SQL OtoYFT <- sqlQuery( channel = connect_base, query = " SELECT * FROM DonneesTotales WHERE (DonneesTotales.ProblemeSp = 'Ok' AND DonneesTotales.REC_Sp='Y' AND DonneesTotales.Otolithe = 'OT') ") # Liste les champs de la table DonneesTotales sqlColumns(connect_base, sqtable = "DonneesTotales") ``` --- # Exercice en forme de bilan * Installer le package `VGAMdata` * Créer un document Rmarkdown intitulé **Exercice Bilan 1** dont vous êtes l'auteur. * Ajouter une section : lire des données fournies dans un package * Dans cette section ajouter du code R pour charger le jeu de données pirates1 du package `VGAMdata` * Ajouter une section : lire des données stockée sous forme d'un fichier `csv` * Télécharger le fichier [Pint.txt](https://marieetienne.github.io/datasets/Pin.txt) * Importer le jeu de données présents dans le fichier `Pin.txt` dans R. * Essayer de charger votre propre fichier dans une 3ème section ``` ## ## ── Column specification ──────────────────────────────────────────────────────── ## cols( ## Site = col_double(), ## NomSite = col_character(), ## Distance = col_double(), ## Arbre = col_double(), ## Poids = col_double(), ## Surface = col_double(), ## Largeur = col_double(), ## Longueur = col_double(), ## CircArbre = col_double() ## ) ``` --- name: manip_tidy # Manipulation de données --- template: manip_tidy ## Un tour dans le tidyverse Le `tidyverse` est ensemble de packages développés pour *faciliter* la manipulation de données dans `R`. - Installer le package `tidyverse`. ```r install.packages("tidyverse") library(tidyverse) ``` -- D'après les créateurs, dans Wickham and Grolemund [WG16] <img src="../resources/figs/data-science-explore.png" width="60%" style="display: block; margin: auto;" /> Objectif : Obtenir un code plus lisible --- template: manip_tidy ## Un apercu du jeu de données Pour avoir un aperçu du jeu de données on peut utiliser la commande ```r glimpse(SamaresEq_readr) ``` ``` ## Rows: 2,380 ## Columns: 9 ## $ Site <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, … ## $ NomSite <chr> "Gornies", "Gornies", "Gornies", "Gornies", "Gornies", "Gorn… ## $ Distance <dbl> 6.3, 6.3, 6.3, 6.3, 6.3, 6.3, 6.3, 6.3, 6.3, 6.3, 6.3, 6.3, … ## $ Arbre <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, … ## $ Poids <dbl> 11.0, 15.0, 14.6, 13.8, 12.2, 11.1, 14.2, 15.6, 15.1, 13.3, … ## $ Surface <dbl> 0.73816, 0.69958, 0.75847, 0.77878, 0.62038, 0.53712, 0.6762… ## $ Largeur <dbl> 0.42700, 0.48900, 0.44400, 0.47400, 0.40400, 0.33900, 0.4220… ## $ Longueur <dbl> 2.31502, 2.15873, 2.27595, 2.25641, 2.03175, 2.04151, 2.2271… ## $ CircArbre <dbl> 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, … ``` --- template: manip_tidy ## Opérations sur les variables (les colonnes) ### Sélectionner certaines variables **select** Pour modifier les variables présentes dans le jeu de données * Ne garder que la variable `NomSite` ```r select(SamaresEq_readr, NomSite) ``` * Supprimer les variables `Site` et `Arbre` ```r select(SamaresEq_readr, -Site, -Arbre) ``` --- template: manip_tidy ## Opérations sur les variables (les colonnes) ### Créer une nouvelle variable **mutate** : pour ajouter une colonne ```r mutate(SamaresEq_readr, Disp = Surface / Poids) ``` ``` ## # A tibble: 2,380 x 10 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre Disp ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 0.0671 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 0.0466 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 0.0520 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 0.0564 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 0.0509 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 0.0484 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 0.0476 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 0.0454 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 0.0406 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 0.0569 ## # … with 2,370 more rows ``` --- template: manip_tidy ## Opérations sur les variables (les colonnes) ### Renommer des variables **rename** : pour ajouter une colonne ```r SamaresEq_readr %>% rename( Surf = Surface, long = Longueur, larg = Largeur) ``` ``` ## # A tibble: 2,380 x 9 ## Site NomSite Distance Arbre Poids Surf larg long CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 ## # … with 2,370 more rows ``` --- template: manip_tidy ## Opérations sur les variables (les colonnes) ### Combiner des commandes ```r mutate(select(SamaresEq_readr, Surface, Poids) , Disp = Surface / Poids) ``` ``` ## # A tibble: 2,380 x 3 ## Surface Poids Disp ## <dbl> <dbl> <dbl> ## 1 0.738 11 0.0671 ## 2 0.700 15 0.0466 ## 3 0.758 14.6 0.0520 ## 4 0.779 13.8 0.0564 ## 5 0.620 12.2 0.0509 ## 6 0.537 11.1 0.0484 ## 7 0.676 14.2 0.0476 ## 8 0.708 15.6 0.0454 ## 9 0.613 15.1 0.0406 ## 10 0.756 13.3 0.0569 ## # … with 2,370 more rows ``` -- .care[*** Ce n'est pas très lisible ***] --- template: manip_tidy ## L'opérateur `%>%` (CTRL + SHIFT + M) Pour enchaîner les traitements sur des données, on peut utiliser l'opérateur ` %>% ` --- count: false .panel1-pipe-auto[ ```r *SamaresEq_readr ``` ] .panel2-pipe-auto[ ``` ## # A tibble: 2,380 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 ## # … with 2,370 more rows ``` ] --- count: false .panel1-pipe-auto[ ```r SamaresEq_readr %>% * select(Surface, Poids) ``` ] .panel2-pipe-auto[ ``` ## # A tibble: 2,380 x 2 ## Surface Poids ## <dbl> <dbl> ## 1 0.738 11 ## 2 0.700 15 ## 3 0.758 14.6 ## 4 0.779 13.8 ## 5 0.620 12.2 ## 6 0.537 11.1 ## 7 0.676 14.2 ## 8 0.708 15.6 ## 9 0.613 15.1 ## 10 0.756 13.3 ## # … with 2,370 more rows ``` ] --- count: false .panel1-pipe-auto[ ```r SamaresEq_readr %>% select(Surface, Poids) %>% * mutate( Disp = Surface / Poids) ``` ] .panel2-pipe-auto[ ``` ## # A tibble: 2,380 x 3 ## Surface Poids Disp ## <dbl> <dbl> <dbl> ## 1 0.738 11 0.0671 ## 2 0.700 15 0.0466 ## 3 0.758 14.6 0.0520 ## 4 0.779 13.8 0.0564 ## 5 0.620 12.2 0.0509 ## 6 0.537 11.1 0.0484 ## 7 0.676 14.2 0.0476 ## 8 0.708 15.6 0.0454 ## 9 0.613 15.1 0.0406 ## 10 0.756 13.3 0.0569 ## # … with 2,370 more rows ``` ] <style> .panel1-pipe-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-pipe-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-pipe-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- template: manip_tidy ## Opérations sur les variables (les colonnes) ### Exercice * Ajouter à la table de données `SamaresEq_readr`, une variable `Prod` contenant le produit `Largeur` fois `Longueur` et une variable `Diff_surf` qui calcule la différence entre la variable précédemment définie et la surface présente dans la table. * Ajouter une variable `Disp` valant la surface divisée par le poids, ainsi qu'une variable `log_Disp` contenant le logarithme de Disp * Supprimer l'information sur le Numéroe du site qui est redondante avec le nom du site. * Sauver le résultat dans une table nommée `SamaresEq_disp`. --- count: false .panel1-ex_select-auto[ ```r *SamaresEq_readr ``` ] .panel2-ex_select-auto[ ``` ## # A tibble: 2,380 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 ## # … with 2,370 more rows ``` ] --- count: false .panel1-ex_select-auto[ ```r SamaresEq_readr %>% * mutate( Prod = Largeur * Longueur) ``` ] .panel2-ex_select-auto[ ``` ## # A tibble: 2,380 x 10 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre Prod ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 0.989 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 1.06 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 1.01 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 1.07 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 0.821 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 0.692 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 0.940 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 0.971 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 0.810 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 0.961 ## # … with 2,370 more rows ``` ] --- count: false .panel1-ex_select-auto[ ```r SamaresEq_readr %>% mutate( Prod = Largeur * Longueur) %>% * mutate( Diff_surf = Prod - Surface) ``` ] .panel2-ex_select-auto[ ``` ## # A tibble: 2,380 x 11 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre Prod ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 0.989 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 1.06 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 1.01 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 1.07 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 0.821 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 0.692 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 0.940 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 0.971 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 0.810 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 0.961 ## # … with 2,370 more rows, and 1 more variable: Diff_surf <dbl> ``` ] --- count: false .panel1-ex_select-auto[ ```r SamaresEq_readr %>% mutate( Prod = Largeur * Longueur) %>% mutate( Diff_surf = Prod - Surface) %>% * mutate( Disp = Surface / Poids, log_disp = log(Disp)) ``` ] .panel2-ex_select-auto[ ``` ## # A tibble: 2,380 x 13 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre Prod ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 0.989 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 1.06 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 1.01 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 1.07 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 0.821 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 0.692 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 0.940 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 0.971 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 0.810 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 0.961 ## # … with 2,370 more rows, and 3 more variables: Diff_surf <dbl>, Disp <dbl>, ## # log_disp <dbl> ``` ] --- count: false .panel1-ex_select-auto[ ```r SamaresEq_readr %>% mutate( Prod = Largeur * Longueur) %>% mutate( Diff_surf = Prod - Surface) %>% mutate( Disp = Surface / Poids, log_disp = log(Disp)) %>% * select(-Site) -> SamaresEq_disp ``` ] .panel2-ex_select-auto[ ] <style> .panel1-ex_select-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-ex_select-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-ex_select-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- template: manip_tidy ## Opérations sur les variables (les colonnes) ### Résumer des variables **summarise** : Calculer des valeurs résumées (nombre d'observation, moyennes, écart types, ...) ```r SamaresEq_readr %>% summarise( longueur_m = mean(Longueur, na.rm = TRUE)) ``` ``` ## # A tibble: 1 x 1 ## longueur_m ## <dbl> ## 1 2.49 ``` ```r SamaresEq_readr %>% summarise( longueur_moyenne = mean(Longueur, na.rm = TRUE), nobs = n(), longueur_mediane = median(Longueur) ) ``` ``` ## # A tibble: 1 x 3 ## longueur_moyenne nobs longueur_mediane ## <dbl> <int> <dbl> ## 1 2.49 2380 2.48 ``` --- template: manip_tidy ## Opérations sur les variables (les colonnes) ### Résumer des variables **summarise** : Calculer des valeurs résumées (nombre d'observation, moyennes, écart types, ...) * Calculer le nombre d'observations et les médianes pour plusieurs variables ```r SamaresEq_readr %>% summarise_at( vars(Largeur, Longueur), list(moy = mean, med = median, ecart_type = sd)) ``` ``` ## # A tibble: 1 x 6 ## Largeur_moy Longueur_moy Largeur_med Longueur_med Largeur_ecart_type ## <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 0.451 2.49 0.445 2.48 0.0706 ## # … with 1 more variable: Longueur_ecart_type <dbl> ``` --- template: manip_tidy ## Opérations sur les variables (les colonnes) ### Résumer des variables **summarise** : Calculer des valeurs résumées (nombre d'observation, moyennes, écart types, ...) * Calculer les moyennes de toutes les variables quantitatives ```r SamaresEq_readr %>% summarise_if(is.numeric, mean, na.rm=TRUE) ``` ``` ## # A tibble: 1 x 8 ## Site Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 3.98 8.99 10.9 26.6 0.823 0.451 2.49 26.2 ``` -- Les variables site et arbre sont des numéros et non des nombres. Il faut les traiter comme des catégories --- count: false .panel1-sum_fact-auto[ ```r *SamaresEq_readr ``` ] .panel2-sum_fact-auto[ ``` ## # A tibble: 2,380 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 ## # … with 2,370 more rows ``` ] --- count: false .panel1-sum_fact-auto[ ```r SamaresEq_readr %>% * mutate(Site = as.factor(Site), Arbre = as.factor(Site)) ``` ] .panel2-sum_fact-auto[ ``` ## # A tibble: 2,380 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <fct> <chr> <dbl> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 4 11 0.738 0.427 2.32 18.5 ## 2 4 Gornies 6.3 4 15 0.700 0.489 2.16 18.5 ## 3 4 Gornies 6.3 4 14.6 0.758 0.444 2.28 18.5 ## 4 4 Gornies 6.3 4 13.8 0.779 0.474 2.26 18.5 ## 5 4 Gornies 6.3 4 12.2 0.620 0.404 2.03 18.5 ## 6 4 Gornies 6.3 4 11.1 0.537 0.339 2.04 18.5 ## 7 4 Gornies 6.3 4 14.2 0.676 0.422 2.23 18.5 ## 8 4 Gornies 6.3 4 15.6 0.708 0.452 2.15 18.5 ## 9 4 Gornies 6.3 4 15.1 0.613 0.377 2.15 18.5 ## 10 4 Gornies 6.3 4 13.3 0.756 0.447 2.15 18.5 ## # … with 2,370 more rows ``` ] --- count: false .panel1-sum_fact-auto[ ```r SamaresEq_readr %>% mutate(Site = as.factor(Site), Arbre = as.factor(Site)) %>% * summarise_if(is.numeric, mean, na.rm=TRUE) ``` ] .panel2-sum_fact-auto[ ``` ## # A tibble: 1 x 6 ## Distance Poids Surface Largeur Longueur CircArbre ## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 8.99 26.6 0.823 0.451 2.49 26.2 ``` ] --- count: false .panel1-sum_fact-auto[ ```r SamaresEq_readr %>% mutate(Site = as.factor(Site), Arbre = as.factor(Site)) %>% summarise_if(is.numeric, mean, na.rm=TRUE) *SamaresEq_readr ``` ] .panel2-sum_fact-auto[ ``` ## # A tibble: 1 x 6 ## Distance Poids Surface Largeur Longueur CircArbre ## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 8.99 26.6 0.823 0.451 2.49 26.2 ``` ``` ## # A tibble: 2,380 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 ## # … with 2,370 more rows ``` ] --- count: false .panel1-sum_fact-auto[ ```r SamaresEq_readr %>% mutate(Site = as.factor(Site), Arbre = as.factor(Site)) %>% summarise_if(is.numeric, mean, na.rm=TRUE) SamaresEq_readr %>% * mutate(Site = as.factor(Site), Arbre = as.factor(Arbre)) ``` ] .panel2-sum_fact-auto[ ``` ## # A tibble: 1 x 6 ## Distance Poids Surface Largeur Longueur CircArbre ## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 8.99 26.6 0.823 0.451 2.49 26.2 ``` ``` ## # A tibble: 2,380 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <fct> <chr> <dbl> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 ## # … with 2,370 more rows ``` ] --- count: false .panel1-sum_fact-auto[ ```r SamaresEq_readr %>% mutate(Site = as.factor(Site), Arbre = as.factor(Site)) %>% summarise_if(is.numeric, mean, na.rm=TRUE) SamaresEq_readr %>% mutate(Site = as.factor(Site), Arbre = as.factor(Arbre)) %>% * summarise_if(is.factor, n_distinct) ``` ] .panel2-sum_fact-auto[ ``` ## # A tibble: 1 x 6 ## Distance Poids Surface Largeur Longueur CircArbre ## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 8.99 26.6 0.823 0.451 2.49 26.2 ``` ``` ## # A tibble: 1 x 2 ## Site Arbre ## <int> <int> ## 1 7 29 ``` ] <style> .panel1-sum_fact-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-sum_fact-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-sum_fact-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- template: manip_tidy ## Opérations sur les variables (les colonnes) ### Exercice **summarise** * Calculer la moyenne et l'écart-type pour les variables `Surface` et `disp`. -- --- count: false .panel1-summarise_ex1-auto[ ```r *SamaresEq_disp ``` ] .panel2-summarise_ex1-auto[ ``` ## # A tibble: 2,380 x 12 ## NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre Prod ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 0.989 ## 2 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 1.06 ## 3 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 1.01 ## 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 1.07 ## 5 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 0.821 ## 6 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 0.692 ## 7 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 0.940 ## 8 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 0.971 ## 9 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 0.810 ## 10 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 0.961 ## # … with 2,370 more rows, and 3 more variables: Diff_surf <dbl>, Disp <dbl>, ## # log_disp <dbl> ``` ] --- count: false .panel1-summarise_ex1-auto[ ```r SamaresEq_disp %>% * summarise_at( vars(Surface, Disp), * list(ecart_type = sd, moy = mean), na.rm = TRUE) ``` ] .panel2-summarise_ex1-auto[ ``` ## # A tibble: 1 x 4 ## Surface_ecart_type Disp_ecart_type Surface_moy Disp_moy ## <dbl> <dbl> <dbl> <dbl> ## 1 0.179 0.00948 0.823 0.0330 ``` ] <style> .panel1-summarise_ex1-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-summarise_ex1-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-summarise_ex1-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- template: manip_tidy ## Des traitements par sous groupes **group_by** * Calculer des moyennes pour chaque groupe --- count: false .panel1-group_by_1-auto[ ```r *SamaresEq_disp ``` ] .panel2-group_by_1-auto[ ``` ## # A tibble: 2,380 x 12 ## NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre Prod ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 0.989 ## 2 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 1.06 ## 3 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 1.01 ## 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 1.07 ## 5 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 0.821 ## 6 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 0.692 ## 7 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 0.940 ## 8 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 0.971 ## 9 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 0.810 ## 10 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 0.961 ## # … with 2,370 more rows, and 3 more variables: Diff_surf <dbl>, Disp <dbl>, ## # log_disp <dbl> ``` ] --- count: false .panel1-group_by_1-auto[ ```r SamaresEq_disp %>% * group_by( NomSite) ``` ] .panel2-group_by_1-auto[ ``` ## # A tibble: 2,380 x 12 ## # Groups: NomSite [7] ## NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre Prod ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 0.989 ## 2 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 1.06 ## 3 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 1.01 ## 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 1.07 ## 5 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 0.821 ## 6 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 0.692 ## 7 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 0.940 ## 8 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 0.971 ## 9 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 0.810 ## 10 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 0.961 ## # … with 2,370 more rows, and 3 more variables: Diff_surf <dbl>, Disp <dbl>, ## # log_disp <dbl> ``` ] --- count: false .panel1-group_by_1-auto[ ```r SamaresEq_disp %>% group_by( NomSite) %>% * summarise( Surface_m = mean (Surface)) ``` ] .panel2-group_by_1-auto[ ``` ## # A tibble: 7 x 2 ## NomSite Surface_m ## <chr> <dbl> ## 1 Gornies 0.849 ## 2 Grenou_1 0.810 ## 3 Grenou_2 0.853 ## 4 Grenou_3 0.808 ## 5 StBauzille 0.742 ## 6 StEtienne 0.897 ## 7 StLaurent 0.818 ``` ] --- count: false .panel1-group_by_1-auto[ ```r SamaresEq_disp %>% group_by( NomSite) %>% summarise( Surface_m = mean (Surface)) %>% * print(n = 3) ``` ] .panel2-group_by_1-auto[ ``` ## # A tibble: 7 x 2 ## NomSite Surface_m ## <chr> <dbl> ## 1 Gornies 0.849 ## 2 Grenou_1 0.810 ## 3 Grenou_2 0.853 ## # … with 4 more rows ``` ] <style> .panel1-group_by_1-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-group_by_1-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-group_by_1-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- template: manip_tidy ## Des traitements par sous groupes **group_by** * Calculer des effectifs pour chaque Site ```r SamaresEq_disp %>% group_by( NomSite) %>% summarise( n_obs = n()) %>% print(n = 3) ``` ``` ## # A tibble: 7 x 2 ## NomSite n_obs ## <chr> <int> ## 1 Gornies 580 ## 2 Grenou_1 280 ## 3 Grenou_2 300 ## # … with 4 more rows ``` * Calculer les effectifs par Site et par arbre ```r SamaresEq_disp %>% group_by( NomSite, Arbre ) %>% summarise( n_obs = n()) %>% print(n = 3) ``` --- count: false .panel1-group_by_3-auto[ ```r * SamaresEq_disp ``` ] .panel2-group_by_3-auto[ ``` ## # A tibble: 2,380 x 12 ## NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre Prod ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 0.989 ## 2 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 1.06 ## 3 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 1.01 ## 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 1.07 ## 5 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 0.821 ## 6 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 0.692 ## 7 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 0.940 ## 8 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 0.971 ## 9 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 0.810 ## 10 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 0.961 ## # … with 2,370 more rows, and 3 more variables: Diff_surf <dbl>, Disp <dbl>, ## # log_disp <dbl> ``` ] --- count: false .panel1-group_by_3-auto[ ```r SamaresEq_disp %>% * group_by( NomSite, Arbre ) ``` ] .panel2-group_by_3-auto[ ``` ## # A tibble: 2,380 x 12 ## # Groups: NomSite, Arbre [119] ## NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre Prod ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 0.989 ## 2 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 1.06 ## 3 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 1.01 ## 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 1.07 ## 5 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 0.821 ## 6 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 0.692 ## 7 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 0.940 ## 8 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 0.971 ## 9 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 0.810 ## 10 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 0.961 ## # … with 2,370 more rows, and 3 more variables: Diff_surf <dbl>, Disp <dbl>, ## # log_disp <dbl> ``` ] --- count: false .panel1-group_by_3-auto[ ```r SamaresEq_disp %>% group_by( NomSite, Arbre ) %>% * summarise( n_obs = n()) ``` ] .panel2-group_by_3-auto[ ``` ## # A tibble: 119 x 3 ## # Groups: NomSite [7] ## NomSite Arbre n_obs ## <chr> <dbl> <int> ## 1 Gornies 1 20 ## 2 Gornies 2 20 ## 3 Gornies 3 20 ## 4 Gornies 4 20 ## 5 Gornies 5 20 ## 6 Gornies 6 20 ## 7 Gornies 7 20 ## 8 Gornies 8 20 ## 9 Gornies 9 20 ## 10 Gornies 10 20 ## # … with 109 more rows ``` ] --- count: false .panel1-group_by_3-auto[ ```r SamaresEq_disp %>% group_by( NomSite, Arbre ) %>% summarise( n_obs = n()) %>% * print(n = 3) ``` ] .panel2-group_by_3-auto[ ``` ## # A tibble: 119 x 3 ## # Groups: NomSite [7] ## NomSite Arbre n_obs ## <chr> <dbl> <int> ## 1 Gornies 1 20 ## 2 Gornies 2 20 ## 3 Gornies 3 20 ## # … with 116 more rows ``` ] <style> .panel1-group_by_3-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-group_by_3-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-group_by_3-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- template: manip_tidy ## Des traitements par sous groupes **group_by** ### Exercice - Pour chaque site et chaque arbre, donner le nombre de samares échantillonnés et leur poids moyen. - Pour chaque site, donner le nombre d'arbres échantillonnés. --- template: manip_tidy ## Des traitements par sous groupes **group_by** ### Solution * Pour chaque site et chaque arbre, donner le nombre de samares échantillonnés et leur poids moyen. ```r SamaresEq_disp %>% group_by( NomSite, Arbre ) %>% summarise( n_obs = n(), poids_m = mean(Poids)) %>% print(n = 3) ``` ``` ## `summarise()` has grouped output by 'NomSite'. You can override using the `.groups` argument. ``` ``` ## # A tibble: 119 x 4 ## # Groups: NomSite [7] ## NomSite Arbre n_obs poids_m ## <chr> <dbl> <int> <dbl> ## 1 Gornies 1 20 13.4 ## 2 Gornies 2 20 11.5 ## 3 Gornies 3 20 24.6 ## # … with 116 more rows ``` --- template: manip_tidy ## Des traitements par sous groupes **group_by** ### Solution * Pour chaque site, donner le nombre d'arbres échantillonnés. ```r SamaresEq_disp %>% group_by( NomSite) %>% summarise( n_Arbre = n_distinct(Arbre)) ``` ``` ## # A tibble: 7 x 2 ## NomSite n_Arbre ## <chr> <int> ## 1 Gornies 29 ## 2 Grenou_1 14 ## 3 Grenou_2 15 ## 4 Grenou_3 10 ## 5 StBauzille 15 ## 6 StEtienne 7 ## 7 StLaurent 29 ``` --- template: manip_tidy ## Sauvegarder des tables de données ### Sauvegarder dans un format texte **write_csv** ```r write_csv(SamaresEq_disp, path = "SamaresEq_disp.csv") ``` ### Sauvegarder dans un format compressé **save** ```r save("SamaresEq_disp", file = "SamaresEq_disp.RData") ``` --- template: manip_tidy ## Opérations sur les individus (les lignes) ### Accéder à des lignes spécifiques ```r slice(SamaresEq_readr, 24) ``` ``` ## # A tibble: 1 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 2 12.3 0.672 0.378 2.47 15 ``` ```r slice(SamaresEq_readr, 24:26) ``` ``` ## # A tibble: 3 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 2 12.3 0.672 0.378 2.47 15 ## 2 4 Gornies 6.3 2 19.3 0.628 0.404 2.30 15 ## 3 4 Gornies 6.3 2 10.5 0.594 0.366 2.30 15 ``` ```r slice(SamaresEq_readr, c(1,5,18)) ``` ``` ## # A tibble: 3 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 ## 2 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 ## 3 4 Gornies 6.3 1 10.4 0.603 0.393 2.07 18.5 ``` --- count: false .panel1-pipe-bis-auto[ ```r *SamaresEq_readr ``` ] .panel2-pipe-bis-auto[ ``` ## # A tibble: 2,380 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 ## # … with 2,370 more rows ``` ] --- count: false .panel1-pipe-bis-auto[ ```r SamaresEq_readr %>% * slice(5:13) ``` ] .panel2-pipe-bis-auto[ ``` ## # A tibble: 9 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 ## 2 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 3 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 ## 4 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 ## 5 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 ## 6 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 ## 7 4 Gornies 6.3 1 12.5 0.730 0.462 2.13 18.5 ## 8 4 Gornies 6.3 1 13.7 0.782 0.474 2.24 18.5 ## 9 4 Gornies 6.3 1 17.1 0.898 0.474 2.50 18.5 ``` ] --- count: false .panel1-pipe-bis-auto[ ```r SamaresEq_readr %>% slice(5:13) %>% * slice(1:3) ``` ] .panel2-pipe-bis-auto[ ``` ## # A tibble: 3 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 ## 2 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 3 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 ``` ] <style> .panel1-pipe-bis-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-pipe-bis-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-pipe-bis-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- template: manip_tidy ## Opérations sur les individus (les lignes) ### Selectionner les individus qui satisfont une condition **filter** * Sélectionner les samares ayant une surface supérieure à 0.75 ```r SamaresEq_readr %>% filter( Surface > 0.75) %>% print(n=4) ``` ``` ## # A tibble: 1,517 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 ## 2 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 ## 3 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 ## 4 4 Gornies 6.3 1 13.7 0.782 0.474 2.24 18.5 ## # … with 1,513 more rows ``` --- template: manip_tidy ## Opérations sur les individus (les lignes) ### Selectionner les individus qui satisfont une condition **filter** * Sélectionner les samares du site 3 ```r SamaresEq_readr %>% filter( Site == 3) %>% print(n=4) ``` ``` ## # A tibble: 200 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 3 Grenou_3 1 1 16.4 0.599 0.355 2.17 40 ## 2 3 Grenou_3 1 1 18.5 0.756 0.401 2.53 40 ## 3 3 Grenou_3 1 1 14.3 0.698 0.413 2.39 40 ## 4 3 Grenou_3 1 1 16.4 0.7 0.393 2.50 40 ## # … with 196 more rows ``` --- template: manip_tidy ## Opérations sur les individus (les lignes) ### Selectionner les individus qui satisfont une condition **filter** * Sélectionner les samares du site 3 ayant une longueur supérieure à 0.75 et une largeur inférieure à 0.35 ```r SamaresEq_readr %>% filter( Site == 3, Longueur > 0.75, Largeur <0.35) %>% print(n=4) ``` ``` ## # A tibble: 9 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 3 Grenou_3 1 1 16.8 0.484 0.246 2.69 40 ## 2 3 Grenou_3 1 1 13.3 0.411 0.252 2.76 40 ## 3 3 Grenou_3 1 1 17.5 0.507 0.316 2.19 40 ## 4 3 Grenou_3 1 1 12.8 0.463 0.326 2.06 40 ## # … with 5 more rows ``` --- template: manip_tidy ## Opérations sur les individus (les lignes) ### Ordonner les lignes **arrange** * Trier par ordre croissant de largeur ```r SamaresEq_readr %>% arrange(Largeur) %>% print(n=5) ``` ``` ## # A tibble: 2,380 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 6 StBauzille 22.1 5 18.1 0.368 0.195 2.91 25 ## 2 6 StBauzille 22.1 15 17.4 0.305 0.210 2.06 8 ## 3 6 StBauzille 22.1 5 19.9 0.509 0.212 2.96 25 ## 4 5 StLaurent 11.3 8 19.2 0.534 0.212 3.39 13 ## 5 2 Grenou_2 0.2 6 20.1 0.416 0.222 2.81 14 ## # … with 2,375 more rows ``` --- template: manip_tidy ## Opérations sur les individus (les lignes) ### Ordonner les lignes **arrange** * Trier par ordre décroissant de largeur ```r SamaresEq_readr %>% arrange(-Largeur) %>% print(n=5 ) ``` ``` ## # A tibble: 2,380 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 5 StLaurent 11.3 24 23.2 0.917 0.733 2.52 15.5 ## 2 7 StEtienne 30.7 5 45 0.925 0.729 2.93 23.5 ## 3 4 Gornies 6.3 24 54.9 1.48 0.710 2.95 17.5 ## 4 2 Grenou_2 0.2 13 27.3 0.837 0.703 2.77 27 ## 5 1 Grenou_1 0 3 14.1 1.22 0.703 2.46 67.5 ## # … with 2,375 more rows ``` --- template: manip_tidy ## Opérations sur les individus (les lignes) ### Ordonner les lignes **arrange** * Trier par ordre décroissant de Largeur au sein des groupes ```r SamaresEq_readr %>% group_by(NomSite) %>% arrange(-Largeur, .by_group = TRUE) ``` ``` ## # A tibble: 2,380 x 9 ## # Groups: NomSite [7] ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 24 54.9 1.48 0.710 2.95 17.5 ## 2 4 Gornies 6.3 24 34.6 1.09 0.664 2.54 17.5 ## 3 4 Gornies 6.3 24 33.5 1.16 0.663 2.52 17.5 ## 4 4 Gornies 6.3 24 29.8 1.32 0.663 2.71 17.5 ## 5 4 Gornies 6.3 24 30.2 1.29 0.657 2.78 17.5 ## 6 4 Gornies 6.3 24 48 1.30 0.654 2.81 17.5 ## 7 4 Gornies 6.3 24 28.8 1.11 0.640 2.48 17.5 ## 8 4 Gornies 6.3 21 35.8 1.36 0.634 3.10 29 ## 9 4 Gornies 6.3 24 34.1 1.14 0.629 2.50 17.5 ## 10 4 Gornies 6.3 24 31.5 1.21 0.625 2.81 17.5 ## # … with 2,370 more rows ``` --- template: manip_tidy ## Opérations sur les individus (les lignes) ### Exercice * Sélectionner toutes les observations du site Gornies * Sélectionner toutes les observations correspondantes à des largeurs supérieures à 0.45 mais de longueur inférieure à 2.32 * Sélectionner toutes les observations qui ne proviennent ni du site `Gornies` ni du site `StEtienne`. * Compter pour chaque site le nombre de samares ayant une largeur inférieure à 0.37 et une longueur supérieure à 0.7. --- template: manip_tidy ## Opérations sur les individus (les lignes) ### Solution **filter** * Sélectionner toutes les observations du site Gornies ```r SamaresEq_readr %>% filter(Site == 'Gornies') ``` -- * Sélectionner toutes les observations correspondantes à des largeurs supérieures à 0.45 mais le longueur inférieure à 2.32 ```r SamaresEq_readr %>% filter(Largeur > 0.45 & Longueur < 2.32) ``` -- * Sélectionner toutes les observations qui ne proviennent ni du site `Gornies` ni du site `StEtienne`. ```r SamaresEq_readr %>% filter( ! NomSite %in% c('Gornies', 'StEtienne') ) ``` ``` ## # A tibble: 1,660 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 1 Grenou_1 0 1 16.8 0.839 0.458 2.46 57 ## 2 1 Grenou_1 0 1 25.4 0.809 0.433 2.48 57 ## 3 1 Grenou_1 0 1 21.7 0.774 0.441 2.36 57 ## 4 1 Grenou_1 0 1 14.9 0.860 0.453 2.64 57 ## 5 1 Grenou_1 0 1 21 0.814 0.469 2.42 57 ## 6 1 Grenou_1 0 1 20.1 0.828 0.465 2.41 57 ## 7 1 Grenou_1 0 1 26.8 0.986 0.484 2.68 57 ## 8 1 Grenou_1 0 1 21.4 0.871 0.454 2.72 57 ## 9 1 Grenou_1 0 1 18.9 0.835 0.429 2.71 57 ## 10 1 Grenou_1 0 1 18.4 0.828 0.469 2.45 57 ## # … with 1,650 more rows ``` -- * Compter pour chaque site le nombre de samares ayant une largeur inférieur à 0.37 et une longueur supérieure à 0.7 --- count: false .panel1-filter_ex_4-auto[ ```r *SamaresEq_readr ``` ] .panel2-filter_ex_4-auto[ ``` ## # A tibble: 2,380 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 ## # … with 2,370 more rows ``` ] --- count: false .panel1-filter_ex_4-auto[ ```r SamaresEq_readr %>% * filter(Largeur < 0.37, Longueur > 0.7) ``` ] .panel2-filter_ex_4-auto[ ``` ## # A tibble: 250 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 2 4 Gornies 6.3 1 11.2 0.483 0.356 1.88 18.5 ## 3 4 Gornies 6.3 2 9.7 0.510 0.309 2.29 15 ## 4 4 Gornies 6.3 2 10.5 0.594 0.366 2.30 15 ## 5 4 Gornies 6.3 2 11.5 0.541 0.331 2.36 15 ## 6 4 Gornies 6.3 2 9.6 0.489 0.290 2.30 15 ## 7 4 Gornies 6.3 2 9.4 0.545 0.333 2.39 15 ## 8 4 Gornies 6.3 2 10.4 0.497 0.301 2.17 15 ## 9 4 Gornies 6.3 2 9.2 0.617 0.350 2.53 15 ## 10 4 Gornies 6.3 2 10.4 0.550 0.356 2.20 15 ## # … with 240 more rows ``` ] --- count: false .panel1-filter_ex_4-auto[ ```r SamaresEq_readr %>% filter(Largeur < 0.37, Longueur > 0.7) %>% * group_by(Site) ``` ] .panel2-filter_ex_4-auto[ ``` ## # A tibble: 250 x 9 ## # Groups: Site [7] ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 2 4 Gornies 6.3 1 11.2 0.483 0.356 1.88 18.5 ## 3 4 Gornies 6.3 2 9.7 0.510 0.309 2.29 15 ## 4 4 Gornies 6.3 2 10.5 0.594 0.366 2.30 15 ## 5 4 Gornies 6.3 2 11.5 0.541 0.331 2.36 15 ## 6 4 Gornies 6.3 2 9.6 0.489 0.290 2.30 15 ## 7 4 Gornies 6.3 2 9.4 0.545 0.333 2.39 15 ## 8 4 Gornies 6.3 2 10.4 0.497 0.301 2.17 15 ## 9 4 Gornies 6.3 2 9.2 0.617 0.350 2.53 15 ## 10 4 Gornies 6.3 2 10.4 0.550 0.356 2.20 15 ## # … with 240 more rows ``` ] --- count: false .panel1-filter_ex_4-auto[ ```r SamaresEq_readr %>% filter(Largeur < 0.37, Longueur > 0.7) %>% group_by(Site) %>% * summarise( nobs = n()) ``` ] .panel2-filter_ex_4-auto[ ``` ## # A tibble: 7 x 2 ## Site nobs ## <dbl> <int> ## 1 1 46 ## 2 2 28 ## 3 3 18 ## 4 4 40 ## 5 5 80 ## 6 6 35 ## 7 7 3 ``` ] <style> .panel1-filter_ex_4-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-filter_ex_4-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-filter_ex_4-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- template: manip_tidy ## Exercice sous forme de bilan Créer un fichier Rmarkdown qui réalise les tâches suivantes * Importer le jeu de données sur la [biomasse](https://marieetienne.github.io/datasets/Biomass_diversity.csv) et le stocker dans une variable biomasse_dta * Calculer le nombre de mesures de rendement par pays et par années * Calculer le rendement moyen par pays et par année * Créer une table `biomass_france` ne contenant que les données des expériences en France * Créer une table `biomass_france_post2005` contenant les données des expériences en France en 2005 ou 2006 * (plus dur) Compter le nombre d'années de mesure par pays ``` ## ## ── Column specification ──────────────────────────────────────────────────────── ## cols( ## COUNTRY = col_character(), ## YEAR = col_double(), ## PLOT = col_double(), ## G = col_double(), ## L = col_double(), ## HARV_YIELD = col_double(), ## H = col_double() ## ) ``` ``` ## `summarise()` has grouped output by 'COUNTRY'. You can override using the `.groups` argument. ``` --- count: false .panel1-biomass-sol1-auto[ ```r *biomass_dta <- read_csv("https://marieetienne.github.io/datasets/Biomass_diversity.csv") ``` ] .panel2-biomass-sol1-auto[ ``` ## ## ── Column specification ──────────────────────────────────────────────────────── ## cols( ## COUNTRY = col_character(), ## YEAR = col_double(), ## PLOT = col_double(), ## G = col_double(), ## L = col_double(), ## HARV_YIELD = col_double(), ## H = col_double() ## ) ``` ] --- count: false .panel1-biomass-sol1-auto[ ```r biomass_dta <- read_csv("https://marieetienne.github.io/datasets/Biomass_diversity.csv") *biomass_dta ``` ] .panel2-biomass-sol1-auto[ ``` ## ## ── Column specification ──────────────────────────────────────────────────────── ## cols( ## COUNTRY = col_character(), ## YEAR = col_double(), ## PLOT = col_double(), ## G = col_double(), ## L = col_double(), ## HARV_YIELD = col_double(), ## H = col_double() ## ) ``` ``` ## # A tibble: 864 x 7 ## COUNTRY YEAR PLOT G L HARV_YIELD H ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Belgium 2003 12 1 0 2.69 1 ## 2 Iceland_a 2003 12 1 0 2.82 1 ## 3 Sweden_a 2003 12 1 0 2.61 1 ## 4 Belgium 2004 12 1 0 3.44 1 ## 5 France 2004 12 1 0 3.09 1 ## 6 Iceland_a 2004 12 1 0 1.88 1 ## 7 Norway_a 2004 12 1 0 1.38 1 ## 8 Sweden_a 2004 12 1 0 1.03 1 ## 9 Sweden_b 2004 12 1 0 0.832 1 ## 10 Belgium 2005 12 1 0 3.30 1 ## # … with 854 more rows ``` ] --- count: false .panel1-biomass-sol1-auto[ ```r biomass_dta <- read_csv("https://marieetienne.github.io/datasets/Biomass_diversity.csv") biomass_dta %>% * group_by(COUNTRY, YEAR) ``` ] .panel2-biomass-sol1-auto[ ``` ## ## ── Column specification ──────────────────────────────────────────────────────── ## cols( ## COUNTRY = col_character(), ## YEAR = col_double(), ## PLOT = col_double(), ## G = col_double(), ## L = col_double(), ## HARV_YIELD = col_double(), ## H = col_double() ## ) ``` ``` ## # A tibble: 864 x 7 ## # Groups: COUNTRY, YEAR [18] ## COUNTRY YEAR PLOT G L HARV_YIELD H ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Belgium 2003 12 1 0 2.69 1 ## 2 Iceland_a 2003 12 1 0 2.82 1 ## 3 Sweden_a 2003 12 1 0 2.61 1 ## 4 Belgium 2004 12 1 0 3.44 1 ## 5 France 2004 12 1 0 3.09 1 ## 6 Iceland_a 2004 12 1 0 1.88 1 ## 7 Norway_a 2004 12 1 0 1.38 1 ## 8 Sweden_a 2004 12 1 0 1.03 1 ## 9 Sweden_b 2004 12 1 0 0.832 1 ## 10 Belgium 2005 12 1 0 3.30 1 ## # … with 854 more rows ``` ] --- count: false .panel1-biomass-sol1-auto[ ```r biomass_dta <- read_csv("https://marieetienne.github.io/datasets/Biomass_diversity.csv") biomass_dta %>% group_by(COUNTRY, YEAR) %>% * summarise(nobs = n(), rend_moy = mean(HARV_YIELD, na.rm = TRUE)) ``` ] .panel2-biomass-sol1-auto[ ``` ## ## ── Column specification ──────────────────────────────────────────────────────── ## cols( ## COUNTRY = col_character(), ## YEAR = col_double(), ## PLOT = col_double(), ## G = col_double(), ## L = col_double(), ## HARV_YIELD = col_double(), ## H = col_double() ## ) ``` ``` ## # A tibble: 18 x 4 ## # Groups: COUNTRY [6] ## COUNTRY YEAR nobs rend_moy ## <chr> <dbl> <int> <dbl> ## 1 Belgium 2003 48 3.58 ## 2 Belgium 2004 48 6.07 ## 3 Belgium 2005 48 4.15 ## 4 France 2004 48 3.05 ## 5 France 2005 48 4.83 ## 6 France 2006 48 3.88 ## 7 Iceland_a 2003 48 2.10 ## 8 Iceland_a 2004 48 1.51 ## 9 Iceland_a 2005 48 1.47 ## 10 Norway_a 2004 48 4.36 ## 11 Norway_a 2005 48 3.27 ## 12 Norway_a 2006 48 3.17 ## 13 Sweden_a 2003 48 3.52 ## 14 Sweden_a 2004 48 3.34 ## 15 Sweden_a 2005 48 2.79 ## 16 Sweden_b 2004 48 3.07 ## 17 Sweden_b 2005 48 2.43 ## 18 Sweden_b 2006 48 1.71 ``` ] <style> .panel1-biomass-sol1-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-biomass-sol1-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-biomass-sol1-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- count: false .panel1-biomass-sol2-auto[ ```r *biomass_dta ``` ] .panel2-biomass-sol2-auto[ ``` ## # A tibble: 864 x 7 ## COUNTRY YEAR PLOT G L HARV_YIELD H ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Belgium 2003 12 1 0 2.69 1 ## 2 Iceland_a 2003 12 1 0 2.82 1 ## 3 Sweden_a 2003 12 1 0 2.61 1 ## 4 Belgium 2004 12 1 0 3.44 1 ## 5 France 2004 12 1 0 3.09 1 ## 6 Iceland_a 2004 12 1 0 1.88 1 ## 7 Norway_a 2004 12 1 0 1.38 1 ## 8 Sweden_a 2004 12 1 0 1.03 1 ## 9 Sweden_b 2004 12 1 0 0.832 1 ## 10 Belgium 2005 12 1 0 3.30 1 ## # … with 854 more rows ``` ] --- count: false .panel1-biomass-sol2-auto[ ```r biomass_dta %>% * filter(COUNTRY == 'France') -> biomass_france ``` ] .panel2-biomass-sol2-auto[ ] --- count: false .panel1-biomass-sol2-auto[ ```r biomass_dta %>% filter(COUNTRY == 'France') -> biomass_france *biomass_dta ``` ] .panel2-biomass-sol2-auto[ ``` ## # A tibble: 864 x 7 ## COUNTRY YEAR PLOT G L HARV_YIELD H ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Belgium 2003 12 1 0 2.69 1 ## 2 Iceland_a 2003 12 1 0 2.82 1 ## 3 Sweden_a 2003 12 1 0 2.61 1 ## 4 Belgium 2004 12 1 0 3.44 1 ## 5 France 2004 12 1 0 3.09 1 ## 6 Iceland_a 2004 12 1 0 1.88 1 ## 7 Norway_a 2004 12 1 0 1.38 1 ## 8 Sweden_a 2004 12 1 0 1.03 1 ## 9 Sweden_b 2004 12 1 0 0.832 1 ## 10 Belgium 2005 12 1 0 3.30 1 ## # … with 854 more rows ``` ] --- count: false .panel1-biomass-sol2-auto[ ```r biomass_dta %>% filter(COUNTRY == 'France') -> biomass_france biomass_dta %>% * filter(COUNTRY == 'FRANCE', YEAR >= 2005) -> biomass_france_post2005 ``` ] .panel2-biomass-sol2-auto[ ] --- count: false .panel1-biomass-sol2-auto[ ```r biomass_dta %>% filter(COUNTRY == 'France') -> biomass_france biomass_dta %>% filter(COUNTRY == 'FRANCE', YEAR >= 2005) -> biomass_france_post2005 *biomass_dta ``` ] .panel2-biomass-sol2-auto[ ``` ## # A tibble: 864 x 7 ## COUNTRY YEAR PLOT G L HARV_YIELD H ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Belgium 2003 12 1 0 2.69 1 ## 2 Iceland_a 2003 12 1 0 2.82 1 ## 3 Sweden_a 2003 12 1 0 2.61 1 ## 4 Belgium 2004 12 1 0 3.44 1 ## 5 France 2004 12 1 0 3.09 1 ## 6 Iceland_a 2004 12 1 0 1.88 1 ## 7 Norway_a 2004 12 1 0 1.38 1 ## 8 Sweden_a 2004 12 1 0 1.03 1 ## 9 Sweden_b 2004 12 1 0 0.832 1 ## 10 Belgium 2005 12 1 0 3.30 1 ## # … with 854 more rows ``` ] --- count: false .panel1-biomass-sol2-auto[ ```r biomass_dta %>% filter(COUNTRY == 'France') -> biomass_france biomass_dta %>% filter(COUNTRY == 'FRANCE', YEAR >= 2005) -> biomass_france_post2005 biomass_dta %>% * group_by(COUNTRY) ``` ] .panel2-biomass-sol2-auto[ ``` ## # A tibble: 864 x 7 ## # Groups: COUNTRY [6] ## COUNTRY YEAR PLOT G L HARV_YIELD H ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Belgium 2003 12 1 0 2.69 1 ## 2 Iceland_a 2003 12 1 0 2.82 1 ## 3 Sweden_a 2003 12 1 0 2.61 1 ## 4 Belgium 2004 12 1 0 3.44 1 ## 5 France 2004 12 1 0 3.09 1 ## 6 Iceland_a 2004 12 1 0 1.88 1 ## 7 Norway_a 2004 12 1 0 1.38 1 ## 8 Sweden_a 2004 12 1 0 1.03 1 ## 9 Sweden_b 2004 12 1 0 0.832 1 ## 10 Belgium 2005 12 1 0 3.30 1 ## # … with 854 more rows ``` ] --- count: false .panel1-biomass-sol2-auto[ ```r biomass_dta %>% filter(COUNTRY == 'France') -> biomass_france biomass_dta %>% filter(COUNTRY == 'FRANCE', YEAR >= 2005) -> biomass_france_post2005 biomass_dta %>% group_by(COUNTRY) %>% * summarise(n_year = n_distinct(YEAR)) ``` ] .panel2-biomass-sol2-auto[ ``` ## # A tibble: 6 x 2 ## COUNTRY n_year ## <chr> <int> ## 1 Belgium 3 ## 2 France 3 ## 3 Iceland_a 3 ## 4 Norway_a 3 ## 5 Sweden_a 3 ## 6 Sweden_b 3 ``` ] <style> .panel1-biomass-sol2-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-biomass-sol2-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-biomass-sol2-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- template: manip_tidy ## Manipulation du tableau entier **pivot_wider**, **pivot_longer** Une jolie visualisation de l'opération de pivotage est disponible sur [cette page chinoise ](https://bookdown.org/Maxine/r4ds/pivoting.html) **pivot_wider** ```r SamaresEq_readr %>% select(NomSite, Arbre, Poids) %>% group_by(NomSite, Arbre) %>% mutate(nSamares = 1:n()) %>% pivot_wider(names_from = nSamares, values_from = Poids, names_prefix = "nSam") -> SamaresEq_wide ``` --- count: false .panel1-pivot_wider-auto[ ```r *SamaresEq_readr ``` ] .panel2-pivot_wider-auto[ ``` ## # A tibble: 2,380 x 9 ## Site NomSite Distance Arbre Poids Surface Largeur Longueur CircArbre ## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4 Gornies 6.3 1 11 0.738 0.427 2.32 18.5 ## 2 4 Gornies 6.3 1 15 0.700 0.489 2.16 18.5 ## 3 4 Gornies 6.3 1 14.6 0.758 0.444 2.28 18.5 ## 4 4 Gornies 6.3 1 13.8 0.779 0.474 2.26 18.5 ## 5 4 Gornies 6.3 1 12.2 0.620 0.404 2.03 18.5 ## 6 4 Gornies 6.3 1 11.1 0.537 0.339 2.04 18.5 ## 7 4 Gornies 6.3 1 14.2 0.676 0.422 2.23 18.5 ## 8 4 Gornies 6.3 1 15.6 0.708 0.452 2.15 18.5 ## 9 4 Gornies 6.3 1 15.1 0.613 0.377 2.15 18.5 ## 10 4 Gornies 6.3 1 13.3 0.756 0.447 2.15 18.5 ## # … with 2,370 more rows ``` ] --- count: false .panel1-pivot_wider-auto[ ```r SamaresEq_readr %>% * select(NomSite, Arbre, Poids) ``` ] .panel2-pivot_wider-auto[ ``` ## # A tibble: 2,380 x 3 ## NomSite Arbre Poids ## <chr> <dbl> <dbl> ## 1 Gornies 1 11 ## 2 Gornies 1 15 ## 3 Gornies 1 14.6 ## 4 Gornies 1 13.8 ## 5 Gornies 1 12.2 ## 6 Gornies 1 11.1 ## 7 Gornies 1 14.2 ## 8 Gornies 1 15.6 ## 9 Gornies 1 15.1 ## 10 Gornies 1 13.3 ## # … with 2,370 more rows ``` ] --- count: false .panel1-pivot_wider-auto[ ```r SamaresEq_readr %>% select(NomSite, Arbre, Poids) %>% * group_by(NomSite, Arbre) ``` ] .panel2-pivot_wider-auto[ ``` ## # A tibble: 2,380 x 3 ## # Groups: NomSite, Arbre [119] ## NomSite Arbre Poids ## <chr> <dbl> <dbl> ## 1 Gornies 1 11 ## 2 Gornies 1 15 ## 3 Gornies 1 14.6 ## 4 Gornies 1 13.8 ## 5 Gornies 1 12.2 ## 6 Gornies 1 11.1 ## 7 Gornies 1 14.2 ## 8 Gornies 1 15.6 ## 9 Gornies 1 15.1 ## 10 Gornies 1 13.3 ## # … with 2,370 more rows ``` ] --- count: false .panel1-pivot_wider-auto[ ```r SamaresEq_readr %>% select(NomSite, Arbre, Poids) %>% group_by(NomSite, Arbre) %>% * mutate(nSamares = 1:n()) ``` ] .panel2-pivot_wider-auto[ ``` ## # A tibble: 2,380 x 4 ## # Groups: NomSite, Arbre [119] ## NomSite Arbre Poids nSamares ## <chr> <dbl> <dbl> <int> ## 1 Gornies 1 11 1 ## 2 Gornies 1 15 2 ## 3 Gornies 1 14.6 3 ## 4 Gornies 1 13.8 4 ## 5 Gornies 1 12.2 5 ## 6 Gornies 1 11.1 6 ## 7 Gornies 1 14.2 7 ## 8 Gornies 1 15.6 8 ## 9 Gornies 1 15.1 9 ## 10 Gornies 1 13.3 10 ## # … with 2,370 more rows ``` ] --- count: false .panel1-pivot_wider-auto[ ```r SamaresEq_readr %>% select(NomSite, Arbre, Poids) %>% group_by(NomSite, Arbre) %>% mutate(nSamares = 1:n()) %>% * pivot_wider(names_from = nSamares, values_from = Poids, names_prefix = "nSam") ``` ] .panel2-pivot_wider-auto[ ``` ## # A tibble: 119 x 22 ## # Groups: NomSite, Arbre [119] ## NomSite Arbre nSam1 nSam2 nSam3 nSam4 nSam5 nSam6 nSam7 nSam8 nSam9 nSam10 ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Gornies 1 11 15 14.6 13.8 12.2 11.1 14.2 15.6 15.1 13.3 ## 2 Gornies 2 9.7 10.6 12.2 12.3 19.3 10.5 11.5 9.6 9.4 10.3 ## 3 Gornies 3 22.7 27.1 29.2 25.2 22.8 22.6 26.9 24.5 28.7 30.2 ## 4 Gornies 4 22.7 27.7 28.6 26.6 20.7 29.3 26.1 25.6 25.8 27.3 ## 5 Gornies 5 12.2 17.2 19 15.5 15.6 14.7 15.9 15.2 14.2 19 ## 6 Gornies 6 34.2 33.3 34.4 29.8 24.1 30.6 25.9 30.2 39 33.6 ## 7 Gornies 7 32.4 62.1 32.6 28.3 29.3 31.7 29.8 26 41.7 18.6 ## 8 Gornies 8 24.3 31.9 30 27.2 35.3 28.8 33.3 26.9 28.7 25.3 ## 9 Gornies 9 31.9 36.5 40.8 31.4 40.2 23.4 25.7 44.6 31 22.4 ## 10 Gornies 10 45.9 28 25.1 27.5 26.4 49.2 55.2 29.6 27.2 29.8 ## # … with 109 more rows, and 10 more variables: nSam11 <dbl>, nSam12 <dbl>, ## # nSam13 <dbl>, nSam14 <dbl>, nSam15 <dbl>, nSam16 <dbl>, nSam17 <dbl>, ## # nSam18 <dbl>, nSam19 <dbl>, nSam20 <dbl> ``` ] --- count: false .panel1-pivot_wider-auto[ ```r SamaresEq_readr %>% select(NomSite, Arbre, Poids) %>% group_by(NomSite, Arbre) %>% mutate(nSamares = 1:n()) %>% pivot_wider(names_from = nSamares, values_from = Poids, names_prefix = "nSam") -> * SamaresEq_wide ``` ] .panel2-pivot_wider-auto[ ] <style> .panel1-pivot_wider-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-pivot_wider-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-pivot_wider-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- template: manip_tidy ## Manipulation du tableau entier **pivot_wider**, **pivot_longer** Une jolie visualisation de l'opération de pivotage est disponible sur [cette page chinoise ](https://bookdown.org/Maxine/r4ds/pivoting.html) **pivot_longer** --- count: false .panel1-pivot_longer-auto[ ```r *SamaresEq_wide ``` ] .panel2-pivot_longer-auto[ ``` ## # A tibble: 119 x 22 ## # Groups: NomSite, Arbre [119] ## NomSite Arbre nSam1 nSam2 nSam3 nSam4 nSam5 nSam6 nSam7 nSam8 nSam9 nSam10 ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Gornies 1 11 15 14.6 13.8 12.2 11.1 14.2 15.6 15.1 13.3 ## 2 Gornies 2 9.7 10.6 12.2 12.3 19.3 10.5 11.5 9.6 9.4 10.3 ## 3 Gornies 3 22.7 27.1 29.2 25.2 22.8 22.6 26.9 24.5 28.7 30.2 ## 4 Gornies 4 22.7 27.7 28.6 26.6 20.7 29.3 26.1 25.6 25.8 27.3 ## 5 Gornies 5 12.2 17.2 19 15.5 15.6 14.7 15.9 15.2 14.2 19 ## 6 Gornies 6 34.2 33.3 34.4 29.8 24.1 30.6 25.9 30.2 39 33.6 ## 7 Gornies 7 32.4 62.1 32.6 28.3 29.3 31.7 29.8 26 41.7 18.6 ## 8 Gornies 8 24.3 31.9 30 27.2 35.3 28.8 33.3 26.9 28.7 25.3 ## 9 Gornies 9 31.9 36.5 40.8 31.4 40.2 23.4 25.7 44.6 31 22.4 ## 10 Gornies 10 45.9 28 25.1 27.5 26.4 49.2 55.2 29.6 27.2 29.8 ## # … with 109 more rows, and 10 more variables: nSam11 <dbl>, nSam12 <dbl>, ## # nSam13 <dbl>, nSam14 <dbl>, nSam15 <dbl>, nSam16 <dbl>, nSam17 <dbl>, ## # nSam18 <dbl>, nSam19 <dbl>, nSam20 <dbl> ``` ] --- count: false .panel1-pivot_longer-auto[ ```r SamaresEq_wide %>% * pivot_longer(cols= starts_with('nSam'), names_to = 'nSamares', values_to = 'Poids') ``` ] .panel2-pivot_longer-auto[ ``` ## # A tibble: 2,380 x 4 ## # Groups: NomSite, Arbre [119] ## NomSite Arbre nSamares Poids ## <chr> <dbl> <chr> <dbl> ## 1 Gornies 1 nSam1 11 ## 2 Gornies 1 nSam2 15 ## 3 Gornies 1 nSam3 14.6 ## 4 Gornies 1 nSam4 13.8 ## 5 Gornies 1 nSam5 12.2 ## 6 Gornies 1 nSam6 11.1 ## 7 Gornies 1 nSam7 14.2 ## 8 Gornies 1 nSam8 15.6 ## 9 Gornies 1 nSam9 15.1 ## 10 Gornies 1 nSam10 13.3 ## # … with 2,370 more rows ``` ] <style> .panel1-pivot_longer-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-pivot_longer-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-pivot_longer-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- # Pour aller plus loin * *R for Data science*, Wickham and Grolemund [WG16], [https://r4ds.had.co.nz/](https://r4ds.had.co.nz/) * [Data Wrangling with R](https://cengel.github.io/R-data-wrangling/) * [Rstudio webinar](https://rstudio.com/resources/webinars/data-wrangling-with-r-and-rstudio/) --- # En conclusion Si vous n'êtes pas convaincu sur le coté reproductible <iframe width="560" height="315" src="https://www.youtube.com/embed/s3JldKoA0zw" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> Merci à [Ignasi Bartomeus](https://bartomeuslab.com/) --- # References Cornillon, P., A. Guyader, F. Husson, et al. (2018). _R pour la statistique et la science des données_. Presses universitaires de Rennes. R Core Team (2017). _R: A Language and Environment for Statistical Computing_. R Foundation for Statistical Computing. Vienna, Austria. URL: [https://www.R-project.org/](https://www.R-project.org/). Wickham, H. and G. Grolemund (2016). _R for data science: import, tidy, transform, visualize, and model data_. " O'Reilly Media, Inc.".