Ce chapitre est en cours d’écriture.

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)
d <- hdv2003

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.tri <- d[order(d$age), ]

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
162 162  18 Homme    <NA> 4982.964
215 215  18 Homme    <NA> 4631.188
346 346  18 Femme    <NA> 1725.410
              occup qualif freres.soeurs clso
162 Etudiant, eleve   <NA>             2  Non
215 Etudiant, eleve   <NA>             2  Oui
346 Etudiant, eleve   <NA>             9  Non
                          relig trav.imp
162  Appartenance sans pratique     <NA>
215 Ni croyance ni appartenance     <NA>
346         Pratiquant regulier     <NA>
    trav.satisf hard.rock lecture.bd peche.chasse
162        <NA>       Non        Non          Non
215        <NA>       Non        Non          Non
346        <NA>       Non        Non          Non
    cuisine bricol cinema sport heures.tv
162     Non    Non    Non   Oui         3
215     Oui    Non    Oui   Oui         2
346     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
1916 1916  97 Femme
270   270  96 Femme
1542 1542  93 Femme
                               nivetud    poids
1916 Derniere annee d'etudes primaires 2162.835
270  Derniere annee d'etudes primaires 9993.020
1542 Derniere annee d'etudes primaires 7107.841
                   occup qualif freres.soeurs
1916       Autre inactif  Autre             5
270             Retraite   <NA>             1
1542 Retire des affaires   <NA>             7
     clso                       relig trav.imp
1916  Non      Pratiquant occasionnel     <NA>
270   Oui Ni croyance ni appartenance     <NA>
1542  Non      Pratiquant occasionnel     <NA>
     trav.satisf hard.rock lecture.bd
1916        <NA>       Non        Non
270         <NA>       Non        Non
1542        <NA>       Non        Non
     peche.chasse cuisine bricol cinema sport
1916          Non     Non    Non    Non   Non
270           Non     Non    Non    Non   Non
1542          Non     Non    Non    Oui   Non
     heures.tv
1916         3
270          6
1542         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.tri <- d[order(d$sexe, d$age), ]

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)
tbl <- tbl_df(hdv2003)
tbl <- tbl %>% arrange(sexe, desc(age))

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)
dt <- as.data.table(hdv2003)

# Option 1
dt <- dt[order(sexe, -age)]

# Option 2
setorder(dt, sexe, -age)