Dplyr arrange() : trier les lignes (observations)

La fonction arrange() trie les lignes (observations) par ordre croissant ou décroissant. Elle est simple d'emploi et peut être combinée avec la fonction group_by() afin que le tri s'effectue à chaque niveau spécifié dans group_by(). La fonction arrange() possède l'argument .by_group, que l'on fixe à TRUE si le tri doit respecter group_by().

Vous pouvez trier sur plusieurs variables, par ordre croissant ou décroissant. Pour trier par ordre décroissant, la variable doit être placée dans desc(), abréviation de descending (décroissant).

La fonction arrange() est illustrée à l'aide des données mpg.

Exemple : trier sur la variable displ par ordre croissant :

mpg |>
  arrange(displ)
## A tibble: 234 × 11
   manufacturer model      displ  year   cyl trans      drv     cty   hwy fl    class
   <chr>        <chr>      <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>
 1 honda        civic        1.6  1999     4 manual(m5) f        28    33 r     subcompact
 2 honda        civic        1.6  1999     4 auto(l4)   f        24    32 r     subcompact
 3 honda        civic        1.6  1999     4 manual(m5) f        25    32 r     subcompact
 4 honda        civic        1.6  1999     4 manual(m5) f        23    29 p     subcompact
 5 honda        civic        1.6  1999     4 auto(l4)   f        24    32 r     subcompact
 6 audi         a4           1.8  1999     4 auto(l5)   f        18    29 p     compact
 7 audi         a4           1.8  1999     4 manual(m5) f        21    29 p     compact
 8 audi         a4 quattro   1.8  1999     4 manual(m5) 4        18    26 p     compact
 9 audi         a4 quattro   1.8  1999     4 auto(l5)   4        16    25 p     compact
10 honda        civic        1.8  2008     4 manual(m5) f        26    34 r     subcompact
11 honda        civic        1.8  2008     4 auto(l5)   f        25    36 r     subcompact
12 honda        civic        1.8  2008     4 auto(l5)   f        24    36 c     subcompact
13 toyota       corolla      1.8  1999     4 auto(l3)   f        24    30 r     compact
14 toyota       corolla      1.8  1999     4 auto(l4)   f        24    33 r     compact
15 toyota       corolla      1.8  1999     4 manual(m5) f        26    35 r     compact
16 toyota       corolla      1.8  2008     4 manual(m5) f        28    37 r     compact
17 toyota       corolla      1.8  2008     4 auto(l4)   f        26    35 r     compact
18 volkswagen   passat       1.8  1999     4 manual(m5) f        21    29 p     midsize
19 volkswagen   passat       1.8  1999     4 auto(l5)   f        18    29 p     midsize
20 volkswagen   jetta        1.9  1999     4 manual(m5) f        33    44 d     compact

Exemple : trier sur la variable displ par ordre croissant et sur hwy par ordre décroissant :

mpg |>
  arrange(displ, desc(hwy))
## A tibble: 234 × 11
   manufacturer model      displ  year   cyl trans      drv     cty   hwy fl    class
   <chr>        <chr>      <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>
 1 honda        civic        1.6  1999     4 manual(m5) f        28    33 r     subcompact
 2 honda        civic        1.6  1999     4 auto(l4)   f        24    32 r     subcompact
 3 honda        civic        1.6  1999     4 manual(m5) f        25    32 r     subcompact
 4 honda        civic        1.6  1999     4 auto(l4)   f        24    32 r     subcompact
 5 honda        civic        1.6  1999     4 manual(m5) f        23    29 p     subcompact
 6 toyota       corolla      1.8  2008     4 manual(m5) f        28    37 r     compact
 7 honda        civic        1.8  2008     4 auto(l5)   f        25    36 r     subcompact
 8 honda        civic        1.8  2008     4 auto(l5)   f        24    36 c     subcompact
 9 toyota       corolla      1.8  1999     4 manual(m5) f        26    35 r     compact
10 toyota       corolla      1.8  2008     4 auto(l4)   f        26    35 r     compact
11 honda        civic        1.8  2008     4 manual(m5) f        26    34 r     subcompact
12 toyota       corolla      1.8  1999     4 auto(l4)   f        24    33 r     compact
13 toyota       corolla      1.8  1999     4 auto(l3)   f        24    30 r     compact
14 audi         a4           1.8  1999     4 auto(l5)   f        18    29 p     compact
15 audi         a4           1.8  1999     4 manual(m5) f        21    29 p     compact
16 volkswagen   passat       1.8  1999     4 manual(m5) f        21    29 p     midsize
17 volkswagen   passat       1.8  1999     4 auto(l5)   f        18    29 p     midsize
18 audi         a4 quattro   1.8  1999     4 manual(m5) 4        18    26 p     compact
19 audi         a4 quattro   1.8  1999     4 auto(l5)   4        16    25 p     compact
20 volkswagen   jetta        1.9  1999     4 manual(m5) f        33    44 d     compact

Exemple : trier avec group_by() activé

Pour que les observations soient triées séparément selon les différents niveaux d'une variable catégorielle, on utilise group_by(). Dans group_by(), on spécifie une ou plusieurs variables catégorielles selon lesquelles le tri doit être groupé (il est possible d'en indiquer plusieurs). Le tri s'effectue alors séparément au sein de chaque catégorie. Dans l'exemple ci-dessous, nous trions les données mpg selon la variable displ, et ce séparément pour chaque constructeur automobile (manufacturer).

mpg |>
  group_by(manufacturer) |>
  arrange(displ)
## Groups:   manufacturer [15]
   manufacturer model      displ  year   cyl trans      drv     cty   hwy fl    class
   <chr>        <chr>      <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>
 1 honda        civic        1.6  1999     4 manual(m5) f        28    33 r     subcompact
 2 honda        civic        1.6  1999     4 auto(l4)   f        24    32 r     subcompact
 3 honda        civic        1.6  1999     4 manual(m5) f        25    32 r     subcompact
 4 honda        civic        1.6  1999     4 manual(m5) f        23    29 p     subcompact
 5 honda        civic        1.6  1999     4 auto(l4)   f        24    32 r     subcompact
 6 audi         a4           1.8  1999     4 auto(l5)   f        18    29 p     compact
 7 audi         a4           1.8  1999     4 manual(m5) f        21    29 p     compact
 8 audi         a4 quattro   1.8  1999     4 manual(m5) 4        18    26 p     compact
 9 audi         a4 quattro   1.8  1999     4 auto(l5)   4        16    25 p     compact
10 honda        civic        1.8  2008     4 manual(m5) f        26    34 r     subcompact

Toutes les opérations qui suivent group_by() s'effectueront de manière groupée, c'est-à-dire séparément dans les groupes que group_by() spécifie. Si le résultat est enregistré dans un nouveau data frame, celui-ci restera lui aussi groupé, de sorte que les opérations ultérieures s'effectueront séparément dans chaque groupe. Dans l'exemple ci-dessous, mpg sert à créer mpg2 après l'application de group_by(). Cela signifie que mpg2 sera lui aussi groupé selon la variable manufacturer, ce qui peut prêter à confusion par la suite.

mpg2 <- mpg |>
  group_by(manufacturer) |>
  arrange(displ)

Pour supprimer le groupement, on utilise la fonction ungroup(). En voici un exemple :

mpg2 <- mpg |>
  group_by(manufacturer) |>
  arrange(displ) |>
  ungroup()

Désormais, mpg2 ne sera plus groupé selon manufacturer.