Tris
Dans ce qui suit on travaillera sur le jeu de données tiré de l’enquête Histoire de vie, fourni avec l’extension questionr
.
library(questionr)
data(hdv2003)
<- hdv2003 d
Fonctions R de base
La fonction sort
permet de trier les éléments d’un vecteur.
sort(c(2, 5, 6, 1, 8))
[1] 1 2 5 6 8
On peut appliquer cette fonction à une variable, mais celle-ci ne permet que d’ordonner les valeurs de cette variable, et pas l’ensemble du tableau de données dont elle fait partie. Pour cela nous avons besoin d’une autre fonction, nommée order
. Celle-ci ne renvoie pas les valeurs du vecteur triées, mais les emplacements de ces valeurs.
Un exemple pour comprendre :
order(c(15, 20, 10))
[1] 3 1 2
Le résultat renvoyé signifie que la plus petite valeur est la valeur située en 3e position, suivie de celle en 1ère position et de celle en 2e position. Tout cela ne paraît pas passionnant à première vue, mais si on mélange ce résultat avec un peu d’indexation directe, ça devient intéressant…
head(order(d$age))
[1] 162 215 346 377 511 646
Ce que cette fonction renvoie, c’est l’ordre dans lequel on doit placer les éléments de age, et donc par extension les lignes de d
, pour que la variable soit triée par ordre croissant. Par conséquent, si on fait :
<- d[order(d$age), ] d.tri
Alors on a trié les lignes de d par ordre d’âge croissant ! Et si on fait un petit :
head(d.tri, 3)
id | age | sexe | nivetud | poids | occup | qualif | freres.soeurs | clso | relig | trav.imp | trav.satisf | hard.rock | lecture.bd | peche.chasse | cuisine | bricol | cinema | sport | heures.tv | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
162 | 162 | 18 | Homme | NA | 4982.964 | Etudiant, eleve | NA | 2 | Non | Appartenance sans pratique | NA | NA | Non | Non | Non | Non | Non | Non | Oui | 3 |
215 | 215 | 18 | Homme | NA | 4631.188 | Etudiant, eleve | NA | 2 | Oui | Ni croyance ni appartenance | NA | NA | Non | Non | Non | Oui | Non | Oui | Oui | 2 |
346 | 346 | 18 | Femme | NA | 1725.410 | Etudiant, eleve | NA | 9 | Non | Pratiquant regulier | NA | NA | Non | Non | Non | Non | Non | Oui | Non | 2 |
On a les caractéristiques des trois enquêtés les plus jeunes.
On peut évidemment trier par ordre décroissant en utilisant l’option decreasing=TRUE
. On peut donc afficher les caractéristiques des trois individus les plus âgés avec :
head(d[order(d$age, decreasing = TRUE), ], 3)
id | age | sexe | nivetud | poids | occup | qualif | freres.soeurs | clso | relig | trav.imp | trav.satisf | hard.rock | lecture.bd | peche.chasse | cuisine | bricol | cinema | sport | heures.tv | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1916 | 1916 | 97 | Femme | Derniere annee d’etudes primaires | 2162.835 | Autre inactif | Autre | 5 | Non | Pratiquant occasionnel | NA | NA | Non | Non | Non | Non | Non | Non | Non | 3 |
270 | 270 | 96 | Femme | Derniere annee d’etudes primaires | 9993.020 | Retraite | NA | 1 | Oui | Ni croyance ni appartenance | NA | NA | Non | Non | Non | Non | Non | Non | Non | 6 |
1542 | 1542 | 93 | Femme | Derniere annee d’etudes primaires | 7107.841 | Retire des affaires | NA | 7 | Non | Pratiquant occasionnel | NA | NA | Non | Non | Non | Non | Non | Oui | Non | 3 |
On peut également trier selon plusieurs variables. Ainsi, si l’on souhaite trier le tableau par sexe puis, au sein de chaque sexe, par age :
<- d[order(d$sexe, d$age), ] d.tri
Si l’on transmets une variable textuelle, le tri sera réalisé de manière alphabétique alors que si l’on transmets un facteur, le tri sera effectué selon l’ordre des facteurs (que l’on peut visualiser avec levels
).
Extension dplyr
On aura simplement recours à la fonction arrange
. Un tri par ordre décroissant s’indique avec la fonction desc
.
library(dplyr)
<- as_tibble(hdv2003)
tbl <- tbl %>% arrange(sexe, desc(age)) tbl
Extension data.table
On pourra utiliser la fonction order
dans la condition sur les observations (attention à sauvegarder le résultats si nécessaire) ou bien la fonction setorder
pour modifier l’ordre des observations directement par assignation (modification directe en mémoire de l’objet). Un tri décroissant s’indique avec le signe -
.
library(data.table)
<- as.data.table(hdv2003)
dt
# Option 1
<- dt[order(sexe, -age)]
dt
# Option 2
setorder(dt, sexe, -age)