knitr::opts_chunk$set( collapse = TRUE, comment = "#>", echo = TRUE )
fruits
library(dplyr) data("fruits", package = "minidebuter")
fruits
class(fruits)
tibble
?Nom | Appelation officielle | Exemple
---|---|---
Vecteur | ??? | 1:10
Facteur | factor
| gl(2, 2)
Matrice | matrix
| matrix(1:4, 2, 2)
Tableau | data.frame
| mtcars
Tableau | tibble
| fruits
Liste | list
| list(a = 1, b = 1:10, c = "Hello!")
Fonction | function
| sin
, exp
, log
Par sécurité : je crée une copie de mes données
fruits2 <- fruits
On utilise le plus souvent l'opérateur $
:
fruits2$Sucres_ratio <- fruits2$Sucres / 100
Sur un tableau tab
, je souhaite ajouter la colonne A
:
tab$A <- nouvelles_valeurs
Attention :
A
existe déjà, les valeurs sont écraséedata.frame
, avec une erreur pour les tibble
fruits2$recyclage <- c(0, 1)
Erreur : Assigned data `c(0, 1)` must be compatible with existing data. x Existing data has 51 rows. x Assigned data has 2 rows. ℹ Only vectors of size 1 are recycled. Run `rlang::last_error()` to see where the error occurred.
mtcars2 <- mtcars mtcars2$recyclage <- c(0, 1) mtcars2$recyclage
f(g(x))
g(x) %>% f()
{width=30%}
## Histogramme hist(fruits$Energie)
library(magrittr) fruits$Energie %>% hist()
Tidyverse: https://www.tidyverse.org/
Charger le package dplyr
...
library(dplyr) # ou require(dplyr)
Ou bien charger tidyverse
...
library(tidyverse)
... mais cela chargera d'autres packages en plus
Les données sont au format "tibble" : c'est comme des "data-frames" mais en mieux !
fruits
Nous allons voir ensemble quelques fonctions très pratiques de la librairie dplyr
.
# | Fonction (US) | Fonction (UK) | Description
---|:-------------:|:-------------:|:----------
1 | mutate
| mutate
| Créer ou modifier des colonnes
2 | select
| select
| Sélectionner des colonnes
3 | relocate
| relocate
| Ré-arranger des colonnes
4 | arrange
| arrange
| Trier les lignes
5 | filter
| filter
| Sélectionner des lignes
6 | group_by
| group_by
| Grouper des lignes
7 | summarize
| summarise
| Résumer des groupes
8 | count
| count
| Compter
{width=100%}
Avec la fonction mutate
.
fruits2 <- fruits %>% mutate(Sucres_ratio = Sucres / 100) head(fruits2[, "Sucres_ratio"])
Avec les fonctions classiques.
fruits2 <- fruits fruits2$Sucres_ratio <- fruits2$Sucres / 100 head(fruits2[, "Sucres_ratio"])
Avec la fonction select
.
fruits %>% select( Energie, Sucres, Lipides, Proteines)
Avec les fonctions classiques.
fruits[, c( "Energie", "Sucres", "Lipides", "Proteines")]
la fonction select
est très versatile !
fruits %>% select(Energie:Proteines, - Eau)
On peut sélectionner des plages entières de colonnes sur la base de leurs noms, en enlever avec le -
, combiner tout cela avec la fonction c()
... ou pas !
Attention, la flexibilité a un coût !
Avec les fonctions arrange
et desc
.
fruits %>% select(Energie, Sucres, Fibres) %>% arrange(desc(Fibres))
Avec les fonctions classiques
fruits[ order(fruits$Fibres, decreasing = TRUE), c("Energie", "Sucres", "Fibres")]
Avec la fonction filter
.
fruits %>% filter(Sucres > 60)
Avec les fonctions classiques.
fruits[fruits$Sucres > 60, ]
Avec la fonction slice
.
fruits %>% slice(3:10)
Avec les fonctions classiques.
fruits[3:10, ]
Avec la fonction group_by
:
fruits %>% group_by(groupe)
Les données sont prêtes à être "traitées" groupe par groupe.
PS : L'opération ungroup()
permet d'enlever les groupes.
Avec la fonction summarize
.
fruits %>% group_by(groupe) %>% summarize(SucreMoyen = mean(Sucres))
Avec les fonctions classiques.
aggregate(fruits$Sucres, by = list(fruits$groupe), FUN = mean)
Calculer l'énergie moyenne, la teneur en sucres médiane et le maximum de la teneur en Fibres par groupe de fruits et trier le tout par ordre décroissant du maximum de la teneur en Fibres !
Sélectionne Ne sélectionne pas
Ne transforme pas select
rename
Peut transformer transmute
mutate
{width=100%}
Avec le "verbe" count
:
fruits %>% count(groupe)
On peut ensuite ranger les résultats par ordre décroissant :
fruits %>% count(groupe) %>% arrange(desc(n))
La fonction cut
permet de transformer un vecteur de valeurs numériques en un facteur contenant des intervalles :
x
: le vecteur de valeurs numériques,breaks
: les limites des intervalles.Exemple :
entiers <- 1:5 cut(entiers, c(0, 2, 5))
Par exemple, compter dans chaque groupe le nombre de fruits dont la teneur en Vitamine C est inférieure ou supérieure à 50 :
fruits %>% mutate(VitCqual = cut(VitamineC, c(0, 50, 100))) %>% count(groupe, VitCqual, name = "N")
Ce n'est pas facile, il vaut mieux utiliser la fonction table
:
library(tidyr) fruits %>% mutate(VitCqual = cut(VitamineC, c(0, 50, 100))) %>% count(groupe, VitCqual, name = "N") %>% pivot_wider(id_cols = groupe, names_from = VitCqual, values_from = N)
Avec les illustrations de Allison Horst (https://www.allisonhorst.com/)
{width=100%}
{width=100%}
{width=100%}
{width=50%}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.