Le package dplyr
permet de réaliser de façon intuitives des transformations de tableaux. Dans ce tutoriel, nous allons nous entraîner avec les données “fruits”.
NB : Le jeu de données est déjà chargé en mémoire !
Le package dplyr
opère sur des tibble
s : l’équivalent tidy
des objets de classe data.frame
, ou, autrement formulé, des structures de données rectangulaires dont chaque colonne peut contenir un type de valeurs différent.
Pour les besoins du cours, j’ai fait en sorte que le jeu de données fruits
soit une tibble
.
“Imprimez” fruits
dans la console et comparez avec ce que donnerait l’impression si fruits
était de classe data.frame
: quelles sont les différences ?
# print pour l'impression
# as.data.frame pour la transformation
print(fruits)
# Si fruits était une data.frame
print(as.data.frame(fruits))
En résumé : vous n’avez pas besoin de vous inquiéter des différences entre tibble
s et data.frame
s, en tout cas pas pour le moment. Il faut juste avoir conscience que les deux existent. Si vous le souhaitez, vous pouvez décider de ne travailler qu’avec des data.frame
s : les fonctions du tidyverse
fonctionneront quand même. Par contre, nous verrons des fonctions que ne fonctionnent pas avec des tibble
s, c’est pour cela que la fonction as.data.frame
est importante.
Pour en savoir plus, rendez-vous ici !
Sélectionnez les fruits contenant moins de 50% d’eau. A quel groupe appartiennent ces fruits ?
# Pour juste filtrer
fruits %>%
filter(Eau <= 50)
# Pour filtrer puis sélectionner la colonne "groupe"
fruits %>%
filter(Eau <= 50) %>%
select(groupe)
Sélectionnez les colonnes nom
, groupe
, Sucres
et Fructose
avec la fonction select
, puis triez les valeurs par ordre décroissant de teneur en sucres avec la fonction arrange
. Quel est le fruit contenant le plus de sucres ?
# select pour la sélection
# arrange pour le tri
# desc pour obtenir un tri décroissant
fruits %>%
select(nom, groupe, Sucres, Fructose) %>%
arrange(desc(Sucres))
Utilisez la fonction mutate
pour calculer le ratio de la teneur en sucres par la teneur en fibres et triez les valeurs obtenues par ordre croissant. Faites exactement la même chose avec la fonction transmute
: que se passe-t-il ?
# Avec mutate
fruits %>%
mutate(ratioSF = Sucres / Fibres) %>%
arrange(ratioSF)
# Avec transmute : on perd toutes les autres colonnes...
fruits %>%
transmute(ratioSF = Sucres / Fibres) %>%
arrange(ratioSF)
# ... mais on peut les rajouter si on veut les garder
fruits %>%
transmute(nom, ratioSF = Sucres / Fibres) %>%
arrange(ratioSF)
Comptez le nombre de fruits par groupe à l’aide de la fonction count
. Cette fonction s’utilise par exemple comme ceci : fruits %>% count()
, et permet de compter toutes les lignes d’une table. Notez que la colonne contenant les comptages s’appelle n
par défaut (voir ?count
pour plus de détails).
fruits %>%
count()
# Utilisez "group_by"
fruits %>%
group_by(groupe) %>%
count()
# Si on veut changer le nom de la colonne
# contenant les comptages :
fruits %>%
group_by(groupe) %>%
count(name = "fréquence")
Pour cet exercice, nous allons résumer la variable Energie
par groupe de fruits. Nous souhaitons construire la table EnergieQuartiles
définie de la manière suivante :
Q1
contient le premier quartile de la variable Energie
,Q2
contient la médiane,Q3
contient le troisième quartile.Utilisez la fonction summarise
pour créer la table EnergieQuartiles
. N’oubliez pas de consulter l’aide de la fonction summarise
pour vous guider. Pour cet exercice vous aurez besoin des fonctions :
group_by
pour grouper les lignes,summarise
pour résumer les valeurs,quantile
pour calculer les quartiles.EnergieQuartiles <- fruits %>%
group_by(groupe) %>%
summarize(
Q1 = quantile(Energie, 0.25),
Q2 = quantile(Energie, 0.5),
Q3 = quantile(Energie, 0.75)
)
EnergieQuartiles
### NB : vous pouvez obtenir le résultat au format "long" très facilement avec summarise :
fruits %>%
group_by(groupe) %>%
summarize(
Value = quantile(Energie, (1:3)/4),
Quantile = c("Q1", "Q2", "Q3")
)
### ou toujours au format "wide", mais avec une
### fonction intermédiaire
foo <- function(x) {
return(tibble(Q1 = quantile(x, 0.25),
Q2 = quantile(x, 0.5),
Q3 = quantile(x, 0.75)))
}
fruits %>%
group_by(groupe) %>%
summarize(foo(Energie))