8 fonctions pour la manipulation

8 fonction R pour la data analyse

Dans cet article, je vous présente, 8 fonctions très utiles, que j’utilise quasi quotidiennement pour analyser des données, et qui sont parfois méconnues !
Cet article est complémentaire à celui dédié à la manipulation de données avec le package dplyr.

👉 Accédez à l’article Manipulations de données avec le package dplyr

 

Certaines des fonctions décrites ici appartiennent également à ce package dplyr. Ce package rentre parfois en conflit avec d’autres packages déjà installés. Pour solutionner ces situations, je vous recommande de lire l’article “Un petit hack pour éviter les conflits de packages sous R”

👉 Accédez à l’article “Un petit hack pour éviter les conflits de packages sous R”

 

1. La fonction pull()

La fonction pull appartient au package dplyr qui lui-même appartient au super package tidyverse. Elle permet d’extraire une colonne d’un data frame directement dans un vecteur.

Cette fonction est l’équivalent du $ dans la commande mydata$colonne, mais elle a l’avantage d’être tidyverse compatible, et donc de pouvoir s’intégrer à une suite d’instructions.

Dans l’exemple ci-dessous, je filtre les données de l’espèce setosa, puis je calcule la surface des sépales, et j’extrais cette variable, grâce à la fonction pull(), pour la stocker dans un vecteur :

 

Alors que si vous utilisez select() vous allez extraire un data.frame, et pas un vecteur ! Cela est moins pratique, car il faudra une seconde étape pour extraire uniquement la colonne d’intérêt.

 

2. La fonction slice()

Cette fonction permet de filtrer des lignes, en fonction de leurs indices. Elle appartient également au package dplyr, elle peut donc s’intégrer à l’intérieur d’une suite de commandes, avec l’utilisation du pipe %>%.

En reprenant une partie de l’exemple précédent, je vais arranger les lignes dans l’ordre décroissant des surface de sépales, et ne conserver que les 5 plus grandes :

 

La fonction slice() permet également de filtrer des lignes discontinues. Dans l’exemple ci-dessous, les lignes 1, 50 et 100 :

La fonction slice() possède plusieurs variantes :

  • slice_head() qui permet d’extraire les premières lignes,
  • slice_tail() qui permet d’extraire les dernières lignes,
  • slice_min() qui permet d’extraire la ligne de la plus faible valeur d’une variable donnée,
  • slice_max() qui permet d’extraire la ligne de la plus forte valeur d’une variable donnée,
  • slice_sample() qui permet d’extraire un échantillon de lignes au hasard :

Vous pouvez consulter l’aide pour avoir plus d’informations sur l’utilisation de ces fonctions slice_:

 

3. La fonction relocate()

Cette fonction permet de modifier l’ordre des colonnes d’un data frame. Elle a appartient également au package dplyr.

Dans l’exemple ci-dessous, je créé une second jeu de données iris (appelé iris2) en recopiant iris, mais en positionnant la colonne Species en première position :

La fonction everything() permet de dire “et ensuite toutes les autres variables”.

Remarque : ce repositionnant est aussi possible avec la fonction select(), mais la fonction relocate() offre plus de possibilités. Par exemple, ici de positionner Species après la variable Sepal.Width, grâce à l’argument .after.

 

Pour plus de détails, consulter l’aide :

 

4. La fonction count()

Cette fonction appartient toujours au package dplyr, elle permet d’obtenir le nombre de lignes correspondant à une condition ou une combinaison de condition. Comme elle est tidyverse compatible, elle est très utile en combinaison avec la fonction group_by().

Par exemple, si je veux connaître, dans le jeu de données heart_disease (du package funModelling), combien de lignes correspondent aux croisement des modalité has_heart_disease et gender :

 

 

5. La fonction if_else()

Je me sers souvent de la fonction if_else() pour créer une variable catégorielle à partir d’une variable numérique.
Dans l’exemple ci-dessous, je crée une variable grp qui prend pour valeur “low” si la longueur du pétale est inférieure à la médiane, et “high” sinon.

 

Et pour faire 3 catégories, il suffit d’emboîter deux if_else(), comme ceci :

 

6. La fonction droplevels()

Cette fonction permet de retirer de la mémoire de R un ou plusieurs niveaux d’une variable catégorielle, qui ne sont plus employés. Par exemple, si je créé un sous-jeu de données ne contenant plus que les espèces setosaet virginica et que je consulte les niveaux de la variables Species, alors les 3 niveaux d’origine vont être affichés : setosa, virginica, et versicolor.

La fonction droplevels, permet de retirer (de la mémoire) le niveau versicolor:

La fonction fct_drop() du package forcats (qui appartient au package tidyverse), permet de faire exactement la même chose, lorsqu’elle est employée dans une fonction mutate() :

 

7. La fonction recode()

La fonction recode() peut être employée pour recoder les niveaux d’une variable catégorielle. Par exemple, si je souhaite recoder :

  •  “setosa” en “seto”
  • “virginica” et “virgi”
  • “versicolor” en “versi”

 

 

8. Les fonctions str_to_lower(), str_to_upper et str_to_title

Lorsque j’importe des données et qu‘il n’y a pas d’homogénéité dans le nommage des variables (certaines sont écrites en minuscule, d’autre en majuscule), j’utilise ces fonctions pour uniformiser les noms. Elles appartiennent au package stringr qui appartient au super package tidyverse.
Voici un exemple avec le jeu de données hall.fame contenu dans le package UsingR :

Nous pouvons voir que certains noms sont en majuscule, d’autres en minuscule, et d’autre encore comporte une majuscule sur la première lettre.
Dans un premier temps, nous pouvons passer tous les noms en minuscule à l’aide de la fonction str_to_lower():

 

Nous pouvons ensuite, dans un second temps, ajouter une Majuscule à la première lettre, en employant la fonction str_to_title():

 

Conclusion

J’espère que cet article vous aura permis de découvrir au moins une nouvelle fonction parmi les 8 décrites !

Et vous, est ce que vous avez une super fonction, que vous utilisez très souvent, et qui est méconnue ?
Si oui, s’il vous plaît, partagez là en commentaire !

Merci !

Et si cet article vous a plu, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee 🙏

Soutenez Statistiques et logiciel R sur Tipeee

 

Poursuivez votre lecture:

 

Image par Hebi B. de Pixabay 

Partager l'article
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

10 commentaires

  1. xavier Répondre

    bonjour,
    merci pour vos articles toujours intéressants et agréable à lire
    une fonction que je trouve bien pratique est clean_names() du package janitor qui permet d’hamoniser facilement les noms de colonnes ( par ex en supprimant les accents , les espaces..) lors d’import de fichier de données

    ex:
    library (janitor)

    df % clean_names(“snake”)
    df

    A tibble: 1 x 1

    elongation_du_parametre

    1 1

    il existe d’autres valeurs de paramètre autre que “snake” il suffit de regarder l’aide
    bonne journée

    • Claire Della Vedova Auteur de l’articleRépondre

      Bonjour Xavier,

      je ne connaissais pas du tout cette fonction, merci pour ce partage !

  2. MRP Répondre

    Merci pour ces astuces !

    Pour ma part, j’ai découvert il n’y a pas si longtemps les packages questionr et esquisse … Je les partage toujours aux stagiaires et aux collègues qui ne sont pas des grands adeptes de R et c’est le succès à tous les coups 🙂

    • Claire Della Vedova Auteur de l’articleRépondre

      Bonjour,

      Moi aussi j’ai découvert questionnr il y a peu, et c’est vrai qu’il est utile. J’en ferai peut être un sujet d’article…
      Bonne continuation

  3. Sébastien Buczinski Répondre

    Bonjour, merci pour ces infos super pratiques. J’avoue que je n’utilise pas les fonctions slice() et relocate(). J’aime beaucoup la fonction case_when() pour recoder des variables en facteurs car je la trouve plus facile à expliciter que des multiples if_else lorsque j’ai plusieurs catégories.
    Super info pour les fonctions de stringr auxquelles je pense trop peu.
    Toujours pratico-pratique ces conseils sont supers!

  4. rib Répondre

    BRAVO, c’est limpide, et tellement utile ! On peut ressortir les fiches le jour où on utilise R, car c’est une des difficultés de l’utilisateur lambda : R est nécessaire pour traiter une question,puis on peut ne pas l’utiliser pendant des semaines. Savoir qu’il existe cette reference est d’une grande aide

  5. escaon Répondre

    Merci pour cet article ! (et ce blog d’une manière générale)

    Je me permets de suggérer 2 variantes :

    5 : dplyr::case_when

    iris %<>% mutate(grp = case_when(Petal.Length <= 4.35 ~ “low”,
    Petal.Length > 5.1 ~ “high”,
    TRUE ~ “med”))

    6 : Je trouve que c’est encore plus lisible en utilisant le %<>% de magrittr

    seto_virgi$Species %<>% droplevels()

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *