Analyse R (Complet)
Analyse R (Complet)
Introduction
Ă lâanalyse dâenquĂȘtes
avec R et RStudio
DerniĂšre mise Ă jour : 24 fvrier 2023
DOI 10.5281/zenodo.6398333
Contributeurs
Par ordre alphabétique :
Julien Barnier, Julien Biaudet, François Briatte, Milan Bouchet-Valat, Ewen Gallic, Frédérique Giraud, Joël
Gombin, Mayeul Kauffmann, Christophe Lalanne, Joseph Larmarange, Nicolas Robette.
Création et Maintenance :
GUIDE-R
Pour une version actualisĂ©e et restructurĂ©e de nombreux chapitres dâanalyse-R, on pourra se rĂ©fĂ©rer Ă
guide-R : Guide pour lâanalyse de donnĂ©es dâenquĂȘte avec R : [Link]
â 2 â
analyse-R
Présentation
Lâobjectif premier dâanalyse-R est de prĂ©senter comment rĂ©aliser des analyses statistiques et diverses
opérations courantes (comme la manipulation de données ou la production de graphiques) avec R. Il
ne sâagit pas dâun cours de statistiques : les diffĂ©rents chapitres prĂ©supposent donc que vous avez dĂ©jĂ
une connaissance des différentes techniques présentées. Si vous souhaitez des précisions théoriques /
mĂ©thodologiques Ă propos dâun certain type dâanalyses, nous vous conseillons dâutiliser votre moteur de
recherche préféré. En effet, on trouve sur internet de trÚs nombreux supports de cours (sans compter les
nombreux ouvrages spécialisés disponibles en librairie).
â 3 â
analyse-R
Manipuler
Prise en main
Présentation et Philosophie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Installation de R et RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Premier contact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Premier travail avec des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Extensions (installation, mise Ă jour) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Introduction au tidyverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Vecteurs, indexation et assignation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Listes et Tableaux de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Facteurs et vecteurs labellisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Organiser ses fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Import de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
OĂč trouver de lâaide ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Manipulation de données
â 5 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Sous-ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Fusion de tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Gestion des dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Fonctions Ă fenĂȘtre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Manipuler du texte avec stringr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Réorganiser ses données avec tidyr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Exporter
Analyser
Statistiques introductives
Statistiques intermédiaires
Statistiques avancées
â 6 â
analyse-R
Approfondir
Graphiques
Programmation
Divers
â 7 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Index
Index des concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337
Index des fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355
Index des extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385
Licence
Le contenu de ce site est diffusĂ© sous licence Creative Commons Attribution - Pas dâutilisation commerciale -
Partage dans les mĂȘmes conditions ([Link]
CC by-nc-sa
Cela signifie donc que vous ĂȘtes libre de recopier / modifier / redistribuer les contenus dâanalyse-R, Ă
condition que vous citiez la source et que vos modifications soient elle-mĂȘmes distribuĂ©es sous la mĂȘme
licence (autorisant ainsi dâautres Ă pouvoir rĂ©utiliser Ă leur tour vos ajouts).
Contribuer
analyse-R est développé avec RStudio et le code source est librement disponible sur GitHub :
[Link]
Ce projet se veut collaboratif. NâhĂ©sitez donc pas Ă proposer des corrections ou ajouts, voire mĂȘme Ă
rédiger des chapitres additionnels.
â 8 â
Présentation et Philosophie
Présentation de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Philosophie de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Présentation de RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
WEBIN-R
Ce chapitre est évoqué dans le webin-R #01 (premier contact avec R & RStudio) sur YouTube.
Présentation de R
R est un langage orientĂ© vers le traitement de donnĂ©es et lâanalyse statistique dĂ©rivĂ© du langage S. Il est
dĂ©veloppĂ© depuis une vingtaine dâannĂ©es par un groupe de volontaires de diffĂ©rents pays. Câest un logiciel
libre1, publié sous licence GNU GPL.
âą câest un logiciel multiplateforme, qui fonctionne aussi bien sur des sytĂšmes Linux, Mac OS X ou
Windows ;
âą câest un logiciel libre, dĂ©veloppĂ© par ses utilisateurs et modifiable par tout un chacun ;
âą câest un logiciel gratuit ;
âą câest un logiciel trĂšs puissant, dont les fonctionnalitĂ©s de base peuvent ĂȘtre Ă©tendues Ă lâaide de
plusieurs milliers dâextensions ;
âą câest un logiciel dont le dĂ©veloppement est trĂšs actif et dont la communautĂ© dâutilisateurs ne
cesse de sâĂ©largir ;
âą les possibilitĂ©s de manipulation de donnĂ©es sous R sont en gĂ©nĂ©ral largement supĂ©rieures Ă
celles des autres logiciels usuels dâanalyse statistique ;
âą câest un logiciel avec dâexcellentes capacitĂ©s graphiques et de nombreuses possibilitĂ©s dâexport ;
⹠avec Rmarkdown2, il est devenu trÚs aisé de produire des rapports automatisés dans divers
â 9 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Il est à noter que le développement autour de R a été particuliÚrement actif ces derniÚres années. On
trouvera dĂšs lors aujourdâhui de nombreuses extensions permettant de se « faciliter la vie » au quotidien,
ce qui nâĂ©tait pas vraiment encore le cas il y a 5 ans.
Philosophie de R
Quelques points particuliers dans le fonctionnement de R peuvent parfois dérouter les utilisateurs
habituĂ©s Ă dâautres logiciels :
⹠Sous R, en général, on ne voit pas directement les données sur lesquelles on travaille ; on ne
dispose pas en permanence dâune vue des donnĂ©es sous forme de tableau3, comme sous
Modalisa ou SPSS. Ceci peut ĂȘtre dĂ©routant au dĂ©but, mais on se rend vite compte quâon nâa pas
besoin de voir en permanence les données pour les analyser.
âą Alors quâavec la plupart des logiciels on rĂ©flĂ©chira avec un fichier de donnĂ©es ouvert Ă la fois, sous
R chaque fichier de données correspondra à un objet différent chargé en mémoire, permettant
de manipuler trĂšs facilement plusieurs objets Ă la fois (par exemple dans le cadre de fusion de
tables4).
âą Avec les autres logiciels, en gĂ©nĂ©ral la production dâune analyse gĂ©nĂšre un grand nombre de
rĂ©sultats de toutes sortes dans lesquels lâutilisateur est censĂ© retrouver et isoler ceux qui
lâintĂ©ressent. Avec R, câest lâinverse : par dĂ©faut lâaffichage est rĂ©duit au minimum et câest
lâutilisateur qui demande Ă voir des rĂ©sultats supplĂ©mentaires ou plus dĂ©taillĂ©s.
2. Voir [Link]
3. On verra quâil est possible avec RStudio de disposer dâune telle vue.
4. Voir par exemple la section dédiée à ce sujet dans le chapitre sur la manipulation de données.
â 10 â
Présentation et Philosophie
⹠Sous R, les résultats des analyses sont eux aussi stockés dans des objets et sont dÚs lors
manipulables.
Inhabituel au début, ce fonctionnement permet en fait assez rapidement de gagner du temps dans la
conduite des analyses.
Présentation de RStudio
Lâinterface de base de R est assez rudimentaire (voir figure ci-aprĂšs).
RStudio est un environnement de développement intégré libre, gratuit, et qui fonctionne sous Windows,
Mac OS X et Linux. Il complÚte R et fournit un éditeur de script avec coloration syntaxique, des
fonctionnalitĂ©s pratiques dâĂ©dition et dâexĂ©cution du code (comme lâautocomplĂ©tion), un affichage
simultanĂ© du code, de la console R, des fichiers, graphiques et pages dâaide, une gestion des extensions,
une intégration avec des systÚmes de contrÎle de versions comme git, etc. Il intÚgre de base divers outils
comme par exemple la production de rapports au format Rmarkdown. Il est en développement actif et
de nouvelles fonctionnalitĂ©s sont ajoutĂ©es rĂ©guliĂšrement. Son principal dĂ©faut est dâavoir une interface
uniquement anglophone.
â 11 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Pour une présentation plus générale de RStudio on pourra se référer au site du projet :
[Link]
RStudio peut tout Ă fait ĂȘtre utilisĂ© pour dĂ©couvrir et dĂ©marrer avec R. Les diffĂ©rents chapitres dâanalyse-
R partent du principe que vous utilisez R avec RStudio. Cependant, à part les éléments portant sur
lâinterface de RStudio, lâensemble du code et des fonctions R peuvent ĂȘtre utilisĂ©s directement dans R,
mĂȘme en lâabsence de RStudio.
La documentation de RStudio (en anglais) est disponible en ligne Ă [Link] Pour ĂȘtre
tenu informé des derniÚres évolutions de RStudio, mais également de plusieurs extensions développées
dans le cadre de ce projet, vous pouvez suivre le blog dédié [Link]
â 12 â
Installation de R et RStudio
Installation de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Installation de RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Mise Ă jour de R sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Voir aussi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
WEBIN-R
Ce chapitre est évoqué dans le webin-R #01 (premier contact avec R & RStudio) sur YouTube.
Installation de R
Pour une installation sous Windows, on se rendra sur cette page : [Link]
base/ et lâon suivra le premier lien pour tĂ©lĂ©charger le programme dâinstallation. Une fois le programme
dâinstallation lancĂ©, il suffira dâinstaller R avec les options par dĂ©faut1.
Si vous travaillez sous Linux, vous devriez pouvoir trouver R via votre gestionnaire de paquets, cela
pouvant dĂ©pendre dâune distribution de Linux Ă une autre.
1. Dans le cas particulier oĂč votre ordinateur est situĂ© derriĂšre un proxy, il est prĂ©fĂ©rable de choisir Options de dĂ©marrage
personnalisĂ©es lorsque cela vous sera demandĂ© par le programme dâinstallation, puis Internet2 lorsquâon vous
demandera le mode de connexion à Internet. Ainsi, R utilisera par défaut la configuration internet du navigateur
Internet Explorer et prendra ainsi en compte les paramĂštres du proxy.
â 13 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Installation de RStudio
Une fois R correctement installé, rendez-vous sur [Link]
pour tĂ©lĂ©charger la derniĂšre version stable de RStudio. Plus prĂ©cisĂ©ment, il sâagit de lâĂ©dition Open Source
de RStudio Desktop (en effet, il existe aussi une version serveur).
Si vous voulez tester les derniÚres fonctionnalités de RStudio, vous pouvez télécharger la version de
développement (plus riche en fonctionnalités que la version stable, mais pouvant contenir des bugs) sur
[Link]
Petite particularitĂ©, la nouvelle version sera installĂ©e Ă cĂŽtĂ© de lâancienne version. Si vous souhaitez faire
de la place sur votre disque dur, vous pouvez dĂ©sinstaller lâancienne version en utilisant lâutilitaire
Désinstaller un programme de Windows.
Lorsque plusieurs versions de R sont disponibles, RStudio choisit par défaut la plus récente. Il est vous est
possible de spécifier à RStudio quelle version de R utiliser via le menu Tools > Global Options > General.
Petit défaut, les extensions (packages) sont installées par défaut sous Windows dans le répertoire
Documents de l'utilisateur > R > win-library > x.y avec x.y correspondant au numéro de
la version de R. Ainsi, si lâon travaillait avec la version 3.0 et que lâon passe Ă la version 3.2, les extensions
que lâon avait sous lâancienne version ne sont plus disponibles pour la nouvelle version. Une astuce
consiste Ă recopier le contenu du rĂ©pertoire 3.0 dans le rĂ©pertoire 3.2 . Puis, on lancera RStudio (sâil
Ă©tait dĂ©jĂ ouvert, on le fermera puis relancera) et on mettra Ă jour lâensemble des packages, soit avec
la fonction, [Link] soit en cliquant sur Update dans lâonglet Packages du quadrant infĂ©rieur
droit.
Voir aussi
Un tutoriel détaillé en français sur le blog Quanti : [Link]
â 14 â
Premier contact
Lâinvite de commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Objets simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Des fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Quelques fonctions utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Aide sur une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Interprétation des arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Autocomplétion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
NOTE
Ce chapitre est inspiré de la section Prise en main du support de cours Introduction à R réalisé par
Julien Barnier.
WEBIN-R
Ce chapitre est évoqué dans le webin-R #01 (premier contact avec R & RStudio) sur YouTube.
Une fois RStudio lancĂ©, vous devriez obtenir une fenĂȘtre similaire Ă la figure ci-aprĂšs.
â 15 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
⹠le quadrant supérieur gauche est dédié aux différents fichiers de travail (nous y reviendrons dans
le chapitre Premier travail avec les données, page 35) ;
âą le quadrant infĂ©rieur gauche correspond Ă ce que lâon appelle la console, câest-Ă -dire Ă R
proprement dit ;
⹠le quadrant supérieur droit permet de connaßtre
⊠la liste des objets en mémoire ou environnement de travail (onglet Environment)
⊠ainsi que lâhistorique des commandes saisies dans la console (onglet History) ;
⹠le quadrant inférieur droit affiche
⊠la liste des fichiers du répertoire de travail (onglet Files),
⊠les graphiques réalisés (onglet Plots),
⊠la liste des extensions disponibles (onglet Packages),
⊠lâaide en ligne (onglet Help)
⊠et un Viewer utilisé pour visualiser certains types de graphiques au format web.
Inutile de tout retenir pour le moment. Nous aborderons chaque outil en temps utile. Pour lâheure,
concentrons-nous sur la console, câest-Ă -dire le quadrant infĂ©rieur gauche.
Lâinvite de commandes
Au démarrage, la console contient un petit texte de bienvenue ressemblant à peu prÚs à ce qui suit :
â 16 â
Premier contact
>
suivi dâune ligne commençant par le caractĂšre > et sur laquelle devrait se trouver votre curseur. Cette
ligne est appelĂ©e lâinvite de commande (ou prompt en anglais). Elle signifie que R est disponible et en
attente de votre prochaine commande.
Nous allons tout de suite lui fournir une premiĂšre commande. Tapez 2 + 3 dans la console et validez
avec la touche Entrée .
R> 2 + 3
[1] 5
En premier lieu, vous pouvez noter la convention typographique utilisée dans ce documents. Les
commandes saisies dans la console sont indiquées sur un fond gris et précédé de R> . Le résultat renvoyé
par R est quant à lui affiché juste en-dessous sur fond blanc.
Bien, nous savons désormais que R sait faire les additions à un chiffre1. Nous pouvons désormais continuer
avec dâautres opĂ©rations arithmĂ©tiques de base :
R> 8 - 12
[1] -4
1. La présence du [1] en début de ligne sera expliquée par la suite dans la section sur les vecteurs, page 23.
â 17 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> 14 * 25
[1] 350
R> -3 / 10
[1] -0.3
R> -0.3
[1] -0.3
On remarquera que R est anglo-saxon. Les nombres sont donc saisies « Ă lâanglaise », câest-Ă -dire en
utilisant le point ( . ) comme séparateur pour les décimales.
â 18 â
Premier contact
NOTE
Une petite astuce trĂšs utile lorsque vous tapez des commandes directement dans la console : en
utilisant les flĂšches Haut et Bas du clavier, vous pouvez naviguer dans lâhistorique des commandes
tapées précédemment. Vous pouvez alors facilement réexécuter ou modifier une commande
particuliĂšre.
Sous RStudio, lâonglet History du quadrant haut-droite vous permet de consulter lâhistorique des
commandes que vous avez transmises Ă R.
Un double-clic sur une commande la recopiera automatiquement dans la console. Vous pouvez
également sélectionner une ou plusieurs commandes puis cliquer sur To Console.
Lorsquâon fournit Ă R une commande incomplĂšte, celui-ci nous propose de la complĂ©ter en nous
présentant une invite de commande spéciale utilisant les signe + . Imaginons par exemple que nous avons
malencontreusement tapé sur Entrée alors que nous souhaitions calculer 4 * 3 :
R> 4 *
â 19 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> 4 *
+ 3
[1] 12
NOTE
Pour des commandes plus complexes, il arrive parfois quâon se retrouve coincĂ© avec une invite +
sans plus savoir comment compléter la saisie correctement. On peut alors annuler la commande en
utilisant la touche Echap ou Esc sous Windows.
Ă noter que les espaces autour des opĂ©rateurs nâont pas dâimportance lorsque lâon saisit les commandes
dans R. Les trois commandes suivantes sont donc équivalentes, mais on privilégie en général la deuxiÚme
pour des raisons de lisibilité du code.
R> 10+2
10 + 2
10 + 2
Des objets
Objets simples
Faire des opĂ©rations arithmĂ©tiques, câest bien, mais sans doute pas totalement suffisant. Notamment, on
aimerait pouvoir rĂ©utiliser le rĂ©sultat dâune opĂ©ration sans avoir Ă le resaisir ou Ă le copier/coller.
Comme tout langage de programmation, R permet de faire cela en utilisant des objets. Prenons tout de
suite un exemple :
R> x <- 2
Que signifie cette commande ? LâopĂ©rateur <- est appelĂ© opĂ©rateur dâassignation. Il prend une valeur
quelconque Ă droite et la place dans lâobjet indiquĂ© Ă gauche. La commande pourrait donc se lire mettre la
valeur 2 dans lâobjet nommĂ© x .
â 20 â
Premier contact
I M P O R TA N T
Il existe trois opĂ©rateurs dâassignation sous R. Ainsi les trois Ă©critures suivantes sont Ă©quivalentes :
R> x <- 2
x = 2
2 -> x
Cependant, pour une meilleure lecture du code, il est conseillĂ© de nâutiliser que <- . Ainsi, lâobjet
créé est systématiquement affiché à gauche. De plus, le symbole = sert également pour écrire des
conditions ou Ă lâintĂ©rieur de fonctions. Il est donc prĂ©fĂ©rable de ne pas lâutiliser pour assigner une
valeur (afin dâĂ©viter les confusions).
On va ensuite pouvoir rĂ©utiliser cet objet dans dâautres calculs ou simplement afficher son contenu :
R> x + 3
[1] 5
R> x
[1] 2
NOTE
Par dĂ©faut, si on donne Ă R seulement le nom dâun objet, il va se dĂ©brouiller pour nous prĂ©senter son
contenu dâune maniĂšre plus ou moins lisible.
On peut utiliser autant dâobjets quâon veut. Ceux-ci peuvent contenir des nombres, des chaĂźnes de
caractĂšres (indiquĂ©es par des guillemets droits doubles " ou simples ' ) et bien dâautres choses encore :
â 21 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> x <- 27
y <- 10
foo <- x + y
foo
[1] 37
[1] "Hello"
I M P O R TA N T
Les noms dâobjets peuvent contenir des lettres, des chiffres, les symboles . et _ . Ils doivent
impérativement commencer par une lettre (jamais par un chiffre). R fait la différence entre les
majuscules et les minuscules, ce qui signifie que x et X sont deux objets différents. On évitera
Ă©galement dâutiliser des caractĂšres accentuĂ©s dans les noms dâobjets. Comme les espaces ne sont pas
autorisés on pourra les remplacer par un point ou un tiret bas.
Enfin, signalons que certains noms courts sont rĂ©servĂ©s par R pour son usage interne et doivent ĂȘtre
Ă©vitĂ©s. On citera notamment c , q , t , C , D , F , I , T , max , min âŠ
Dans RStudio, lâonglet Environment dans le quadrant supĂ©rieur droit indique la liste des objets que vous
avez prĂ©cĂ©demment créés, leur type et la taille quâils occupent en mĂ©moire.
â 22 â
Premier contact
Vecteurs
Imaginons maintenant que nous avons interrogé dix personnes au hasard dans la rue et que nous avons
relevĂ© pour chacune dâelle sa taille en centimĂštres. Nous avons donc une sĂ©rie de dix nombres que nous
souhaiterions pouvoir rĂ©unir de maniĂšre Ă pouvoir travailler sur lâensemble de nos mesures.
Un ensemble de donnĂ©es de mĂȘme nature constituent pour R un vecteur (en anglais vector) et se construit
Ă lâaide dâune fonction nommĂ©e c 2. On lâutilise en lui donnant la liste de nos donnĂ©es, entre parenthĂšses,
séparées par des virgules :
R> tailles <- c(167, 192, 173, 174, 172, 167, 171, 185, 163, 170)
Ce faisant, nous avons créé un objet nommĂ© tailles et comprenant lâensemble de nos donnĂ©es, que
nous pouvons afficher en saisissant simplement son nom :
R> tailles
[1] 167 192 173 174 172 167 171 185 163 170
2. c est lâabbrĂ©viation de combine. Le nom de cette fonction est trĂšs court car on lâutilise trĂšs souvent.
â 23 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> c(144, 168, 179, 175, 182, 188, 167, 152, 163, 145, 176, 155, 156, 164, 167, 1
55, 157, 185, 155, 169, 124, 178, 182, 195, 151, 185, 159, 156, 184, 172)
[1] 144 168 179 175 182 188 167 152 163 145 176 155 156 164
[15] 167 155 157 185 155 169 124 178 182 195 151 185 159 156
[29] 184 172
On a bien notre suite de trente tailles, mais on peut remarquer la présence de nombres entre crochets au
début de chaque ligne ( [1] , [15] et [29] ). En fait ces nombres entre crochets indiquent la position du
premier élément de la ligne dans notre vecteur. Ainsi, le 167 en début de deuxiÚme ligne est le 15e élément
du vecteur, tandis que le 184 de la troisiĂšme ligne est Ă la 29e position.
R> 2
[1] 2
On peut appliquer des opérations arithmétiques simples directement sur des vecteurs :
R> tailles <- c(167, 192, 173, 174, 172, 167, 171, 185, 163, 170)
tailles + 20
[1] 187 212 193 194 192 187 191 205 183 190
[1] 1.67 1.92 1.73 1.74 1.72 1.67 1.71 1.85 1.63 1.70
R> tailles^2
[1] 27889 36864 29929 30276 29584 27889 29241 34225 26569
[10] 28900
On peut aussi combiner des vecteurs entre eux. Lâexemple suivant calcule lâindice de masse corporelle Ă
partir de la taille et du poids :
â 24 â
Premier contact
R> tailles <- c(167, 192, 173, 174, 172, 167, 171, 185, 163, 170)
poids <- c(86, 74, 83, 50, 78, 66, 66, 51, 50, 55)
tailles.m <- tailles / 100
imc <- poids / (tailles.m^2)
imc
[1] 30.84 20.07 27.73 16.51 26.37 23.67 22.57 14.90 18.82
[10] 19.03
I M P O R TA N T
Quand on fait des opérations sur les vecteurs, il faut veiller à soit utiliser un vecteur et un chiffre (dans
des opĂ©rations du type v * 2 ou v + 10 ), soit Ă utiliser des vecteurs de mĂȘme longueur (dans des
opérations du type u + v ).
Si on utilise des vecteurs de longueur différentes, on peut avoir quelques surprises. Quand R effectue
une opération avec deux vecteurs de longueurs différentes, il recopie le vecteur le plus court de
maniĂšre Ă lui donner la mĂȘme taille que le plus long, ce qui sâappelle la rĂšgle de recyclage (recycling rule).
Ainsi, c(1,2) + c(4,5,6,7,8) vaudra lâĂ©quivalent de c(1,2,1,2,1) + c(4,5,6,7,8) .
On a vu jusque-là des vecteurs composés de nombres, mais on peut tout à fait créer des vecteurs
composés de chaßnes de caractÚres, représentant par exemple les réponses à une question ouverte ou
fermée :
R> reponse <- c("Bac+2", "Bac", "CAP", "Bac", "Bac", "CAP", "BEP")
reponse
Enfin, notons que lâon peut accĂ©der Ă un Ă©lĂ©ment particulier du vecteur en faisant suivre le nom du vecteur
de crochets contenant le numĂ©ro de lâĂ©lĂ©ment dĂ©sirĂ©. Par exemple :
R> reponse <- c("Bac+2", "Bac", "CAP", "Bac", "Bac", "CAP", "BEP")
reponse[2]
[1] "Bac"
Cette opĂ©ration sâappelle lâindexation dâun vecteur. Il sâagit ici de sa forme la plus simple, mais il en existe
dâautres beaucoup plus complexes. Lâindexation des vecteurs et des tableaux dans R est lâun des Ă©lĂ©ments
particuliĂšrement souples et puissants du langage (mais aussi lâun des plus dĂ©licats Ă comprendre et Ă
â 25 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
maĂźtriser). Nous en reparlerons dans le chapitre Vecteurs, indexation et assignation, page 71.
NOTE
Sous RStudio, vous avez du remarquer que ce dernier effectue une coloration syntaxique. Lorsque
vous tapez une commande, les valeurs numériques sont affichées dans une certaine couleur, les
valeurs textuelles dans une autre et les noms des fonctions dans une troisiĂšme. De plus, si vous
tapez une parenthÚse ouvrante, RStudio va créer automatiquement aprÚs le curseur la parenthÚse
fermante correspondante (de mĂȘme avec les guillements ou les crochets). Si vous placez le curseur
juste aprÚs une parenthÚse fermante, la parenthÚse ouvrante correspondante sera surlignée, ce qui
sera bien pratique lors de la rédaction de commandes complexes.
Des fonctions
Nous savons désormais faire des opérations simples sur des nombres et des vecteurs, stocker ces données
et résultats dans des objets pour les réutiliser par la suite.
Pour aller un peu plus loin nous allons aborder, aprĂšs les objets, lâautre concept de base de R, Ă savoir les
fonctions. Une fonction se caractérise de la maniÚre suivante :
âą elle a un nom ;
âą elle accepte des arguments (qui peuvent avoir un nom ou pas) ;
⹠elle retourne un résultat et peut effectuer une action comme dessiner un graphique ou lire un
fichier.
En fait rien de bien nouveau puisque nous avons dĂ©jĂ utilisĂ© plusieurs fonctions jusquâici, dont la plus
visible est la fonction c . Dans la ligne suivante :
R> reponse <- c("Bac+2", "Bac", "CAP", "Bac", "Bac", "CAP", "BEP")
on fait appel à la fonction nommée c , on lui passe en arguments (entre parenthÚses et séparées par des
virgules) une série de chaßnes de caractÚres et elle retourne comme résultat un vecteur de chaßnes de
caractĂšres, que nous stockons dans lâobjet reponse .
R> tailles <- c(167, 192, 173, 174, 172, 167, 171, 185, 163, 170)
length(tailles)
[1] 10
â 26 â
Premier contact
R> mean(tailles)
[1] 173.4
R> var(tailles)
[1] 76.71
Ici, la fonction length nous renvoie le nombre dâĂ©lĂ©ments du vecteur, la fonction mean nous donne la
moyenne des éléments du vecteur et fonction var sa variance.
Arguments
Les arguments de la fonction lui sont indiqués entre parenthÚses, juste aprÚs son nom. En général les
premiers arguments passés à la fonction sont des données servant au calcul et les suivants des paramÚtres
influant sur ce calcul. Ceux-ci sont en gĂ©nĂ©ral transmis sous la forme dâargument nommĂ©s.
R> tailles <- c(167, 192, 173, 174, 172, 167, 171, 185, 163, 170)
Imaginons que le deuxiĂšme enquĂȘtĂ© nâait pas voulu nous rĂ©pondre. Nous avons alors dans notre vecteur
une valeur manquante. Celle-ci est symbolisée dans R par le code NA :
R> tailles <- c(167, NA, 173, 174, 172, 167, 171, 185, 163, 170)
R> mean(tailles)
[1] NA
Et oui, par défaut, R renvoie NA pour un grand nombre de calculs (dont la moyenne) lorsque les données
comportent une valeur manquante. On peut cependant modifier ce comportement en fournissant un
paramÚtre supplémentaire à la fonction mean , nommé [Link] :
â 27 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
[1] 171.3
Positionner le paramĂštre [Link] Ă TRUE (vrai) indique Ă la fonction mean de ne pas tenir compte des
valeurs manquantes dans le calcul.
Lorsquâon passe un argument Ă une fonction de cette maniĂšre, câest-Ă -dire sous la forme nom=valeur , on
parle dâargument nommĂ©.
I M P O R TA N T
NA signifie not available. Cette valeur particuliĂšre peut ĂȘtre utilisĂ©e pour indiquer une valeur
manquante pour tout type de liste (nombres, textes, valeurs logique, etc.).
Fonction Description
Ë passage Ă la puissance
â 28 â
Premier contact
Fonction Description
R> ?mean
help("mean")
NOTE
Lâutilisation du raccourci ? ne fonctionne pas pour certains opĂ©rateurs comme * . Dans ce cas on
pourra utiliser ?'*' ou bien simplement help("*") .
Sous RStudio, le fichier dâaide associĂ© apparaitra dans le quadrant infĂ©rieur droit sous lâonglet Help.
â 29 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Cette page décrit (en anglais) la fonction, ses arguments, son résultat, le tout accompagné de diverses
notes, rĂ©fĂ©rences et exemples. Ces pages dâaide contiennent Ă peu prĂšs tout ce que vous pourrez chercher
Ă savoir, mais elles ne sont pas toujours dâune lecture aisĂ©e.
Un autre cas trĂšs courant dans R est de ne pas se souvenir ou de ne pas connaĂźtre le nom de la fonction
effectuant une tĂąche donnĂ©e. Dans ce cas on se reportera aux diffĂ©rentes maniĂšres de trouver de lâaide
dĂ©crites dans le chapitre OĂč trouver de lâaide ?, page 167.
â 30 â
Premier contact
R> ?format
La section Usage présente les arguments de cette fonction et leur valeur par défaut :
Regardons ce que cette fonction peut faire. Passons-lui un vecteur avec deux nombres :
Elle renvoie un vecteur de chaßnes de caractÚres. Le nombre de décimales a été harmonisé et des espaces
ont Ă©tĂ© ajoutĂ©s au dĂ©but du premier nombre afin que lâensemble des valeurs soient alignĂ©es vers la droite.
Dans le cas présent, nous avons saisi les arguments de la fonction sans les nommer. DÚs lors, R considÚre
lâordre dans lesquels nous avons saisi les arguments, ordre qui correspond Ă celui du fichier dâaide. Il a
dÚs lors considéré que c(12.3, 5678) correspond à la valeur attribuée à x et que TRUE est la valeur
attribuée à trim .
Lâargument nsmall permet dâindiquer le nombre minimum de dĂ©cimales que lâon souhaite afficher. Il
est en quatriÚme position. DÚs lors, pour pouvoir le renseigner avec des arguments non nommés, il faut
fournir également une valeur pour le troisiÚme argument digits .
Ce nâest pas forcĂ©ment ce quâil y a de plus pratique. DâoĂč lâintĂ©rĂȘt des arguments nommĂ©s. En prĂ©cisant
nsmall = dans lâappel de la fonction, on pourra indiquer que lâon souhaite modifier spĂ©cifiquement
â 31 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
cet argument. Lorsque lâon utilise des arguments non nommĂ©s, lâordre nâimporte plus puisque R sera en
capacité de reconnaßtre ses petits.
Ă lâusage, on aura le plus souvent recours Ă une combinaison dâarguments non nommĂ©s et dâarguments
nommés. On indiquera les premiers arguments (qui correspondent en général aux données de départ)
sans les nommer et on précisera les options souhaitées avec des arguments nommés. Par exemple, pour
un affichage à la française :
Lorsque lâon regarde la section Usage du fichier dâaide, il apparait que certains arguments, suivi par le
symbole = , ont une valeur par dĂ©faut. Il nâest donc pas nĂ©cessaire de les inclure dans lâappel de la fonction,
auquel cas la valeur pas dĂ©faut sera prise en compte. Par contre, dâautres arguments, ici x , nâont pas de
valeur par défaut et il est donc nécessaire de fournir systématiquement une valeur.
Enfin, pour certaines fonctions, on verra parfois apparaĂźtre le symbole ... Ce dernier correspond Ă un
nombre indĂ©terminĂ© dâarguments. Il peut sâagir, comme dans le cas de format dâarguments additionnels
qui seront utilisĂ©s dans certains cas de figure, ou bien dâarguments qui seront transmis Ă une fonction
secondaire appelée par la fonction principale, ou encore, comme pour le cas de la fonction c , de la
possibilité de saisir un nombre indéfini de données sources.
Autocomplétion
RStudio fournit un outil bien pratique appelĂ© autocomplĂ©tion3. Saisissez les premiĂšres lettres dâune
fonction, par exemple me puis appuyez sur la touche Tabulation . RStudio affichera la liste des
fonctions dont le nom commence par me ainsi quâun court descriptif de chacune. Un appui sur la touche
Entrée provoquera la saisie du nom complet de la fonction choisie.
â 32 â
Premier contact
Ă lâintĂ©rieur des parenthĂšses dâune fonction, vous pouvez utiliser lâautocomplĂ©tion pour retrouver un
argument de cette fonction.
Vous pouvez Ă©galement utiliser lâautocomplĂ©tion pour retrouver le nom dâun objet que vous avez
précédemment créé.
â 33 â
Premier travail avec des
données
Regrouper les commandes dans des scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Ajouter des commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Tableaux de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Inspection visuelle des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Structure du tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Accéder aux variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
La fonction str . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Quelques calculs simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Nos premiers graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Et ensuite ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
NOTE
Ce chapitre est inspirĂ© de la section Premier travail avec les donnĂ©es du support de cours Introduction Ă
R réalisé par Julien Barnier.
WEBIN-R
Ce chapitre est évoqué dans le webin-R #01 (premier contact avec R & RStudio) sur YouTube.
â 35 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
seconde fois. Lâutilisation de la console est donc restreinte aux petites commandes « jetables », le plus
souvent utilisées comme test.
La plupart du temps, les commandes seront stockĂ©es dans un fichier Ă part, que lâon pourra facilement
ouvrir, éditer et exécuter en tout ou partie si besoin. On appelle en général ce type de fichier un script.
Pour comprendre comment cela fonctionne, dans RStudio cliquez sur lâicĂŽne en haut Ă gauche
représentant un fichier avec un signe plus vert, puis choisissez R script.
â 36 â
Premier travail avec des données
Nous pouvons désormais y saisir des commandes. Par exemple, tapez sur la premiÚre ligne la commande
suivante : 2 + 2 . Ensuite, cliquez sur lâicĂŽne Run (en haut Ă droite de lâonglet du script) ou bien pressez
simulatément les touches CTRL et Entrée 1.
R> 2 + 2
[1] 4
Voici donc comment soumettre rapidement Ă R les commandes saisies dans votre fichier. Vous pouvez
dĂ©sormais lâenregistrer, lâouvrir plus tard, et en exĂ©cuter tout ou partie. Ă noter que vous avez plusieurs
possibilités pour soumettre des commandes à R :
⹠vous pouvez exécuter la ligne sur laquelle se trouve votre curseur en cliquant sur Run ou en
pressant simulatément les touches CTRL et Entrée ;
⹠vous pouvez sélectionner plusieurs lignes contenant des commandes et les exécuter toutes en
une seule fois exactement de la mĂȘme maniĂšre ;
âą vous pouvez exĂ©cuter dâun coup lâintĂ©gralitĂ© de votre fichier en cliquant sur lâicĂŽne Source.
La plupart du travail sous R consistera donc à éditer un ou plusieurs fichiers de commandes et à envoyer
réguliÚrement les commandes saisies à R en utilisant les raccourcis clavier ad hoc.
Pour plus dâinformation sur lâutilisation des scripts R dans RStudio, voir (en anglais) :
[Link]
â 37 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
NOTE
Quand vous enregistrez un script sous RStudio, il est possible quâil vous demande de choisir un type
dâencodage des caractĂšres (Choose Encoding). Si tel est le cas, utilisez de prĂ©fĂ©rence UTF-8.
Un commentaire sous R commence par un ou plusieurs symboles # (qui sâobtient avec les touches
Alt Gr et 3 sur les claviers de type PC). Tout ce qui suit ce symbole jusquâĂ la fin de la ligne est considĂ©rĂ©
comme un commentaire. On peut créer une ligne entiÚre de commentaire en la faisant débuter par ## .
Par exemple :
I M P O R TA N T
Dans tous les cas, il est trĂšs important de documenter ses fichiers R au fur et Ă mesure, faute de quoi
on risque de ne plus y comprendre grand chose si on les reprend ne serait-ce que quelques semaines
plus tard.
Avec RStudio, vous pouvez également utiliser les commentaires pour créer des sections au sein de votre
script et naviguer plus rapidement. Il suffit de faire suivre une ligne de commentaires dâau moins 4 signes
moins ( ---- ). Par exemple, si vous saisissez ceci dans votre script :
â 38 â
Premier travail avec des données
x <- 2
y <- 5
## Calculs ----
x + y
Vous verrez apparaĂźtre en bas Ă gauche de la fenĂȘtre du script un symbole diĂšse orange. Si vous cliquez
dessus, un menu de navigation sâaffichera vous permettant de vous dĂ©placez rapidement au sein de votre
script. Pour plus dâinformation, voir la documentation de RStudio (en anglais) :
[Link]
Les sections peuvent Ă©galement ĂȘtre facilement créées avec le raccourci clavier CTRL + SHIFT + R .
Note : on remarquera au passage que le titre de lâonglet est affichĂ© en rouge et suivi dâune astĂ©risque ( * ),
nous indiquant ainsi quâil y a des modifications non enregistrĂ©es dans notre fichier.
â 39 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Tableaux de données
Dans cette partie nous allons utiliser un jeu de donnĂ©es inclus dans lâextension questionr. Lâinstallation
dâextension est dĂ©crite dans le chapitre Extensions, page 59.
Le jeu de donnĂ©es en question est un extrait de lâenquĂȘte Histoire de vie rĂ©alisĂ©e par lâINSEE en 2003.
Il contient 2000 individus et 20 variables. Pour pouvoir utiliser ces donnĂ©es, il faut dâabord charger
lâextension questionr (aprĂšs lâavoir installĂ©e, bien entendu). Le chargement dâune extension en mĂ©moire
se fait Ă lâaide de la fonction library . Sous RStudio, vous pouvez Ă©galement charger une extension en
allant dans lâonglet Packages du quadrant infĂ©rieur droit qui liste lâensemble des packages disponibles et
en cliquant la case à cocher située à gauche du nom du package désiré.
R> library(questionr)
Puis nous allons indiquer Ă R que nous souhaitons accĂ©der au jeu de donnĂ©es hdv2003 Ă lâaide de la
fonction data :
R> data(hdv2003)
Bien. Et maintenant, elles sont oĂč mes donnĂ©es ? Et bien elles se trouvent dans un objet nommĂ© hdv2003
dĂ©sormais chargĂ© en mĂ©moire et accessible directement. Dâailleurs, cet objet est maintenant visible dans
lâonglet Environment du quadrant supĂ©rieur droit.
R> hdv2003
Le résultat (non reproduit ici) ne ressemble pas forcément à grand-chose⊠Il faut se rappeler que par
dĂ©faut, lorsquâon lui fournit seulement un nom dâobjet, R essaye de lâafficher de la maniĂšre la meilleure
(ou la moins pire) possible. La rĂ©ponse Ă la commande hdv2003 nâest donc rien moins que lâaffichage des
données brutes contenues dans cet objet.
Ce qui signifie donc que lâintĂ©gralitĂ© de notre jeu de donnĂ©es est inclus dans lâobjet nommĂ© hdv2003 !
En effet, dans R, un objet peut trĂšs bien contenir un simple nombre, un vecteur ou bien le rĂ©sultat dâune
enquĂȘte tout entier. Dans ce cas, les objets sont appelĂ©s des data frames, ou tableaux de donnĂ©es. Ils
peuvent ĂȘtre manipulĂ©s comme tout autre objet. Par exemple :
va entraĂźner la copie de lâensemble de nos donnĂ©es dans un nouvel objet nommĂ© d , ce qui peut paraĂźtre
parfaitement inutile mais a en fait lâavantage de fournir un objet avec un nom beaucoup plus court, ce qui
â 40 â
Premier travail avec des données
Résumons
Comme nous avons désormais décidé de saisir nos commandes dans un script et non plus directement
dans la console, les premiĂšres lignes de notre fichier de travail sur les donnĂ©es de lâenquĂȘte Histoire de vie
pourraient donc ressembler Ă ceci :
NĂ©anmoins, R propose une interface permettant de visualiser le contenu dâun tableau de donnĂ©es Ă lâaide
de la fonction View :
R> View(d)
Sous RStudio, on peut aussi afficher la visionneusee (viewer) en cliquant sur la petite icĂŽne en forme
de tableau situĂ©e Ă droite de la ligne dâun tableau de donnĂ©es dans lâonglet Environment du quadrant
supérieur droit (cf. figure ci-aprÚs).
â 41 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Dans tous les cas, RStudio lancera le viewer dans un onglet dédié dans le quadrant supérieur gauche. Le
visualiseur de RStudio est plus avancé que celui-de base fournit par R. Il est possible de trier les données
selon une variable en cliquant sur le nom de cette derniÚre. Il y a également un champs de recherche et un
bouton Filter donnant accÚs à des options de filtrage avancées.
â 42 â
Premier travail avec des données
Structure du tableau
Avant de travailler sur les données, nous allons essayer de comprendre comment elles sont structurées.
Lors de lâimport de donnĂ©es depuis un autre logiciel (que nous aborderons dans un autre chapitre,
page 149), il sâagira souvent de vĂ©rifier que lâimportation sâest bien dĂ©roulĂ©e.
Nous avons dĂ©jĂ vu quâun tableau de donnĂ©es est organisĂ© en lignes et en colonnes, les lignes
correspondant aux observations et les colonnes aux variables. Les fonctions nrow , ncol et dim
donnent respectivement le nombre de lignes, le nombre de colonnes et les dimensions de notre tableau.
Nous pouvons donc dâores et dĂ©jĂ vĂ©rifier que nous avons bien 2000 lignes et 20 colonnes :
R> nrow(d)
[1] 2000
R> ncol(d)
[1] 20
R> dim(d)
[1] 2000 20
La fonction names donne les noms des colonnes de notre tableau, câest-Ă -dire les noms des variables :
R> names(d)
â 43 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
La rĂ©ponse est simple : on utilise le nom de lâobjet, suivi de lâopĂ©rateur $ , suivi du nom de la variable,
comme ceci :
R> d$sexe
Au regard du résultat (non reproduit ici), on constate alors que R a bien accédé au contenu de notre
variable sexe du tableau d et a affichĂ© son contenu, câest-Ă -dire lâensemble des valeurs prises par la
variable.
Les fonctions head et tail permettent dâafficher seulement les premiĂšres (respectivement les
derniĂšres) valeurs prises par la variable. On peut leur passer en argument le nombre dâĂ©lĂ©ments Ă afficher :
R> head(d$nivetud)
[1] 52 42 50 41 46 45 46 24 24 66
Ă noter que ces fonctions marchent aussi pour afficher les lignes du tableau d :
R> head(d, 2)
â 44 â
Premier travail avec des données
La fonction str
La fonction str est plus complÚte que names . Elle liste les différentes variables, indique leur type et
donne le cas Ă©chĂ©ant des informations supplĂ©mentaires ainsi quâun Ă©chantillon des premiĂšres valeurs
prises par cette variable :
R> str(d)
La premiĂšre ligne nous informe quâil sâagit bien dâun tableau de donnĂ©es avec 2000 observations et 20
variables. Vient ensuite la liste des variables. La premiĂšre se nomme id et est de type entier (int). La
seconde se nomme age et est de type numĂ©rique. La troisiĂšme se nomme sexe, il sâagit dâun facteur
(factor).
Un facteur est une variable pouvant prendre un nombre limité de modalités (levels). Ici notre variable a
â 45 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
deux modalités possibles : « Homme » et « Femme ». Ce type de variable est décrit plus en détail dans le
chapitre sur la manipulation de données.
â 46 â
Premier travail avec des données
I M P O R TA N T
La fonction str est essentielle Ă connaĂźtre et peut sâappliquer Ă nâimporte quel type dâobjet. Câest un
excellent moyen de connaĂźtre en dĂ©tail la structure dâun objet. Cependant, les rĂ©sultats peuvent ĂȘtre
parfois trop dĂ©taillĂ©s et on lui priviligiera dans certains cas la fonction describe que lâon abordera
dans les prochains chapitres, cependant moins gĂ©nĂ©rique puisque ne sâappliquant quâĂ des tableaux de
donnĂ©es et Ă des vecteurs, tandis que str peut sâappliquer Ă absolument tout objet, y compris des
fonctions.
R> describe(d)
â 47 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
------------------------------------------------------------
nivetud
n missing distinct
1888 112 8
â 48 â
Premier travail avec des données
1653 347 7
lowest : 0 1 2 3 4, highest: 14 15 16 18 22
â 49 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
â 50 â
Premier travail avec des données
â 51 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
lowest : 0.0 0.1 0.2 0.3 0.4, highest: 8.0 9.0 10.0 11.0 12.0
------------------------------------------------------------
R> mean(d$age)
[1] 48.16
R> median(d$age)
[1] 48
R> min(d$age)
[1] 18
R> max(d$age)
[1] 97
NOTE
Au sens strict, il ne sâagit pas dâun vĂ©ritable Ăąge moyen puisquâil faudrait ajouter 0,5 Ă cette valeur
calculĂ©e, un Ăąge moyen se calculant Ă partir dâĂąges exacts et non Ă partir dâĂąges rĂ©volus. Voir le chapitre
Calculer un Ăąge, page 1327.
â 52 â
Premier travail avec des données
On peut aussi trĂšs facilement obtenir un tri Ă plat Ă lâaide la fonction table :
R> table(d$qualif)
La fonction summary , bien pratique, permet dâavoir une vue rĂ©sumĂ©e dâune variable. Elle sâapplique Ă tout
type dâobjets (y compris un tableau de donnĂ©es entier) et sâadapte Ă celui-ci.
R> summary(d$age)
R> summary(d$qualif)
R> summary(d)
id age sexe
Min. : 1 Min. :18.0 Homme: 899
1st Qu.: 501 1st Qu.:35.0 Femme:1101
Median :1000 Median :48.0
Mean :1000 Mean :48.2
3rd Qu.:1500 3rd Qu.:60.0
â 53 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
nivetud
Enseignement technique ou professionnel court :463
Enseignement superieur y compris technique superieur:441
Derniere annee d'etudes primaires :341
1er cycle :204
2eme cycle :183
(Other) :256
NA's :112
poids occup
Min. : 78 Exerce une profession:1049
1st Qu.: 2222 Chomeur : 134
Median : 4631 Etudiant, eleve : 94
Mean : 5536 Retraite : 392
3rd Qu.: 7627 Retire des affaires : 77
Max. :31092 Au foyer : 171
Autre inactif : 83
qualif [Link]
Employe :594 Min. : 0.00
Ouvrier qualifie :292 1st Qu.: 1.00
Cadre :260 Median : 2.00
Ouvrier specialise :203 Mean : 3.28
Profession intermediaire:160 3rd Qu.: 5.00
(Other) :144 Max. :22.00
NA's :347
clso relig
Oui : 936 Pratiquant regulier :266
Non :1037 Pratiquant occasionnel :442
Ne sait pas: 27 Appartenance sans pratique :760
Ni croyance ni appartenance:399
Rejet : 93
NSP ou NVPR : 40
[Link] [Link]
Le plus important : 29 Satisfaction :480
Aussi important que le reste:259 Insatisfaction:117
Moins important que le reste:708 Equilibre :451
Peu important : 52 NA's :952
NA's :952
â 54 â
Premier travail avec des données
â 55 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> plot(d$sexe)
â 56 â
Premier travail avec des données
Figure 7. Ăge des enquĂȘtĂ©s selon quâils Ă©coutent ou non du hard rock
Il semblerait bien que les amateurs de hard rock soient plus jeunes.
Et ensuite ?
Nous nâavons quâentrâaperçu les possibilitĂ©s de R. Avant de pouvoir nous lancer dans des analyses
statisques, il est prĂ©fĂ©rable de revenir un peu aux fondamentaux de R (les types dâobjets, la syntaxe, le
recodage de variablesâŠ) mais aussi comment installer des extensions, importer des donnĂ©es, etc. Nous
vous conseillons donc de poursuivre la lecture de la section Prise en main puis de vous lancer Ă lâassault de
la section Statistique introductive.
â 57 â
Extensions (installation, mise
Ă jour)
Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Le «tidyverse» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Installation depuis CRAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Installation depuis GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Mise Ă jour des extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
GUIDE-R
WEBIN-R
Ce chapitre est évoqué dans le webin-R #01 (premier contact avec R & RStudio) sur YouTube.
Présentation
Lâinstallation par dĂ©faut du logiciel R contient le cĆur du programme ainsi quâun ensemble de fonctions de
base fournissant un grand nombre dâoutils de traitement de donnĂ©es et dâanalyse statistiques.
R Ă©tant un logiciel libre, il bĂ©nĂ©ficie dâune forte communautĂ© dâutilisateurs qui peuvent librement
contribuer au développement du logiciel en lui ajoutant des fonctionnalités supplémentaires. Ces
contributions prennent la forme dâextensions (packages en anglais) pouvant ĂȘtre installĂ©es par lâutilisateur
et fournissant alors diverses fonctionnalités supplémentaires.
Il existe un trĂšs grand nombre dâextensions (plus de 6500 Ă ce jour), qui sont diffusĂ©es par un rĂ©seau
â 59 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
La liste de toutes les extensions disponibles sur CRAN est disponible ici : [Link]
packages/.
Pour faciliter un peu le repérage des extensions, il existe un ensemble de regroupements thématiques
(Ă©conomĂ©trie, finance, gĂ©nĂ©tique, donnĂ©es spatialesâŠ) baptisĂ©s Task views : [Link]
web/views/.
On y trouve notamment une Task view dédiée aux sciences sociales, listant de nombreuses extensions
potentiellement utiles pour les analyses statistiques dans ce champ disciplinaire : [Link]
[Link]/web/views/[Link].
On peut aussi citer le site Awesome R ([Link] qui fournit une liste
dâextensions choisies et triĂ©es par thĂ©matique.
Le «tidyverse»
Hadley Wickham est professeur associĂ© Ă lâuniversitĂ© de Rice et scientifique en chef Ă Rstudio. Il a
dĂ©veloppĂ© de nombreux extensions pour R (plus dâune cinquantaine Ă ce jours) qui, pour la plupart,
fonctionne de maniĂšre harmonisĂ©e entre elles. Par ailleurs, la plupart sâintĂšgre parfaitement avec
RStudio. Cet ensemble dâextenions est appelĂ© tidyverse et est dĂ©veloppĂ© sur GitHub : [Link]
tidyverse/. Une présentation plus générale du tidyverse est disponible sur le site de RStudio
([Link] et sur un sité dédié ([Link]
Pour certaines tùches, il peut exister plusieurs solutions / extensions différentes pour les réaliser. Dans
la mesure oĂč il nâest pas possible dâĂȘtre exhaustif, nous avons fait le choix dans le cadre dâanalyse-R de
choisir en priorité, lorsque cela est possible, les extensions du tidyverse, en particulier haven, readr et
readxl pour lâimport de donnĂ©es, dplyr, tidyr ou reshape2 pour la manipulation de donnĂ©es, ggplot2 pour
les graphiques, lubridate pour la gestion des dates, forcats pour la manipulation des facteurs ou encore
stringr pour la manipulation de chaĂźnes de caractĂšres.
Il existe par ailleurs une extension homonyme tidyverse. Lâinstallation (voir ci-dessous) de cette extension
permets lâinstallation automatique de lâensemble des autres extensions du tidyverse. Le chargement de
cette extension avec la fonction library (voir ci-aprÚs) permets de charger en mémoire en une seule
opération les principales extensions du tidyverse, à savoir ggplot2, tibble, tidyr, readr, purrr et dplyr.
Pour une présentation plus poussée, voir le chapitre consacré au tidyverse, page 63.
â 60 â
Extensions (installation, mise Ă jour)
Lâoption dep=TRUE indique Ă R de tĂ©lĂ©charger et dâinstaller Ă©galement toutes les extensions dont
lâextension choisie dĂ©pend pour son fonctionnement.
Sous RStudio, on pourra Ă©galement cliquer sur Install dans lâonglet Packages du quadrant infĂ©rieur droit.
Une fois lâextension installĂ©e, elle peut ĂȘtre appelĂ©e depuis la console ou un fichier script avec la fonction
library ou la fonction require :
R> library(ade4)
Ă partir de lĂ , on peut utiliser les fonctions de lâextension, consulter leur page dâaide en ligne, accĂ©der aux
jeux de donnĂ©es quâelle contient, etc.
Pour mettre Ă jour lâensemble des extensions installĂ©es, <dfndata-index=âmise Ă jour, extensionsâ> la
fonction [Link] suffit :
R> [Link]()
Sous RStudio, on pourra alternativement cliquer sur Update dans lâonglet Packages du quadrant infĂ©rieur
droit.
R> [Link]("ade4")
I M P O R TA N T
â 61 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Lâinstallation dâun package depuis GitHub est trĂšs facile grĂące Ă la fonction install_github de
lâextension devtools (que lâon aura prĂ©alablement installĂ©e depuis CRAN ;-) ).
â 62 â
Introduction au tidyverse
Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
tidy data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
tibbles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
NOTE
La version originale de ce chapitre a été écrite par Julien Barnier dans le cadre de son Introduction à R
et au tidyverse.
Extensions
Le terme tidyverse est une contraction de tidy (quâon pourrait traduire par âbien rangĂ©â) et de universe. Il
sâagit en fait dâune collection dâextensions conçues pour travailler ensemble et basĂ©es sur une philosophie
commune.
Elles abordent un trĂšs grand nombre dâopĂ©rations courantes dans R (la liste nâest pas exhaustive) :
âą visualisation
⹠manipulation des tableaux de données
⹠import/export de données
âą manipulation de variables
⹠extraction de données du Web
âą programmation
Un des objectifs de ces extensions est de fournir des fonctions avec une syntaxe cohérente, qui
fonctionnent bien ensemble, et qui retournent des résultats prévisibles. Elles sont en grande partie issues
du travail dâHadley Wickham, qui travaille dĂ©sormais pour RStudio.
â 63 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Installation
tidyverse est Ă©galement le nom dâune extension quâon peut installer de maniĂšre classique, soit via le
bouton Install de lâonglet Packages de RStudio, soit en utilisant la commande :
R> [Link]("tidyverse")
Cette commande va en fait installer plusieurs extensions qui constituent le «coeur» du tidyverse, à savoir :
âą ggplot2 (visualisation)
⹠dplyr (manipulation des données)
⹠tidyr (remise en forme des données)
âą purrr (programmation)
⹠readr (importation de données)
⹠tibble (tableaux de données)
âą forcats (variables qualitatives)
âą stringr (chaĂźnes de caractĂšres)
R> library(tidyverse)
Il existe dâautres extensions qui font partie du tidyverse mais qui doivent ĂȘtre chargĂ©es explicitement,
comme par exemple readxl (pour lâimportation de donnĂ©es depuis des fichiers Excel).
tidy data
Le tidyverse est en partie fondĂ© sur le concept de tidy data, dĂ©veloppĂ© Ă lâorigine par Hadley Wickham
dans un article de 2014 du Journal of Statistical Software.
Il sâagit dâun modĂšle dâorganisation des donnĂ©es qui vise Ă faciliter le travail souvent long et fastidieux de
nettoyage et de prĂ©paration prĂ©alable Ă la mise en oeuvre de mĂ©thodes dâanalyse.
â 64 â
Introduction au tidyverse
Un chapitre dĂ©diĂ© Ă tidyr, page 309 prĂ©sente comment dĂ©finir et rendre des donnĂ©es tidy avec lâextension
tidyr.
Les extensions du tidyverse, notamment ggplot2 et dplyr, sont prévues pour fonctionner avec des
données tidy.
tibbles
GUIDE-R
Une version actualisée de cette section est disponible sur guide-R : Tibbles
Une autre particularité du tidyverse est que ces extensions travaillent avec des tableaux de données au
format tibble , qui est une évolution plus moderne du classique data frame du R de base. Ce format est
fourni est gĂ©rĂ© par lâextension du mĂȘme nom (tibble), qui fait partie du coeur du tidyverse. La plupart des
fonctions des extensions du tidyverse acceptent des data frames en entrée, mais retournent un objet de
classe tibble .
Pour autant, les tibbles restent compatibles avec les data frames. On peut ainsi facilement convertir un
data frame en tibble avec as_tibble :
R> library(tidyverse)
as_tibble(mtcars)
# A tibble: 32 Ă 11
mpg cyl disp hp drat wt qsec vs am
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.5 0 1
1. Quand on veut utiliser des noms de ce type, on doit les entourer avec des backticks (`)
2. Dans R de base, si une table d contient une colonne qualif , d$qual retournera cette colonne.
â 65 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Si le data frame dâorigine a des rownames, on peut dâabord les convertir en colonnes avec
rownames_to_columns :
# A tibble: 32 Ă 12
rowname mpg cyl disp hp drat wt qsec vs
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Mazda RX4 21 6 160 110 3.9 2.62 16.5 0
2 Mazda RX⊠21 6 160 110 3.9 2.88 17.0 0
3 Datsun 7⊠22.8 4 108 93 3.85 2.32 18.6 1
4 Hornet 4⊠21.4 6 258 110 3.08 3.22 19.4 1
5 Hornet S⊠18.7 8 360 175 3.15 3.44 17.0 0
6 Valiant 18.1 6 225 105 2.76 3.46 20.2 1
7 Duster 3⊠14.3 8 360 245 3.21 3.57 15.8 0
8 Merc 240D 24.4 4 147. 62 3.69 3.19 20 1
9 Merc 230 22.8 4 141. 95 3.92 3.15 22.9 1
10 Merc 280 19.2 6 168. 123 3.92 3.44 18.3 1
# ⊠with 22 more rows, and 3 more variables: am <dbl>,
# gear <dbl>, carb <dbl>
Ă lâinverse, on peut Ă tout moment convertir un tibble en data frame avec [Link] :
R> [Link](d)
â 66 â
Introduction au tidyverse
â 67 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
20 1 1 4 1
21 1 0 3 1
22 0 0 3 2
23 0 0 3 2
24 0 0 3 4
25 0 0 3 2
26 1 1 4 1
27 0 1 5 2
28 1 1 5 2
29 0 1 5 4
30 0 1 5 6
31 0 1 5 8
32 1 1 4 2
R> column_to_rownames([Link](d))
â 68 â
Introduction au tidyverse
â 69 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
NOTE
â 70 â
Vecteurs, indexation et
assignation
Présentation des vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Les principaux types de vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
La fonction c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
La fonction rep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
La fonction seq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
LâopĂ©rateur : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Longueur dâun vecteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Quelques vecteurs remarquables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Combiner des vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Valeurs manquantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Indexation par position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Des vecteurs nommés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Indexation par nom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Indexation par condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Assignation par indexation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
GUIDE-R
WEBIN-R
Ce chapitre est évoqué dans le webin-R #02 (les bases du langage R) sur YouTube.
â 71 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Nous allons reprendre plusieurs éléments de base du langage R que nous avons déjà abordés mais de
maniĂšre plus formelle. Une bonne comprĂ©hension des bases du langage, bien quâun peu ardue de prime
abord, permet de comprendre le sens des commandes quâon utilise et de pleinement exploiter la puissance
que R offre en matiÚre de manipulation de données.
Dans ce chapitre, nous reviendrons sur les vecteurs, tandis que les listes et les tableaux de données seront
abordés dans un chapitre dédié, page 91.
⹠les vecteurs sont unidimensionnels (i.e. ce sont des objets à une seule dimension, à la différence
dâune matrice par exemple) ;
âą toutes les valeurs dâun vecteur sont dâun seul et mĂȘme type ;
âą les vecteurs ont une longueur qui correspond au nombre de valeurs contenues dans le vecteur.
âą les nombres rĂ©els (câest-Ă -dire les nombres dĂ©cimaux que nous utilisons au quotidien),
âą les nombres entiers,
âą les chaĂźnes de caractĂšres (qui correspondent Ă du texte) et
⹠les valeurs logiques ou valeurs booléennes, à savoir «vrai» ou «faux».
Pour connaĂźtre la nature dâun objet, le plus simple est dâutiliser la fonction class . Par exemple :
R> class(12.5)
[1] "numeric"
La rĂ©ponse "numeric" nous indique quâil sâagit dâun nombre rĂ©el. Parfois, vous pourrez rencontrer le
terme "double" qui désigne également les nombres réels. Notez que R étant anglophone, la décimale
est indiquĂ©e avec un point ( . ) et non avec une virgule comme câest lâusage en français.
â 72 â
Vecteurs, indexation et assignation
R> class(3)
[1] "numeric"
Sous R, lorsquâon tape un nombre sans autre prĂ©cision, il est considĂ©rĂ© par dĂ©faut comme un nombre rĂ©el.
Pour indiquer spĂ©cifiquement quâon veut un nombre entier, il faut rajouter le suffixe L :
R> class(3L)
[1] "integer"
Au quotidien, il arrive rarement dâavoir Ă utiliser ce suffixe, mais il est toujours bon de le connaĂźtre au cas
oĂč vous le rencontriez dans des manuels ou des exemples de code.
Pour saisir une chaĂźne de caractĂšres, on aura recours aux doubles guillemets droits ( " ) :
R> class("abc")
[1] "character"
Il est Ă©galement possible dâutiliser des guillemets simples ( ' ), dĂšs lors quâon utilise bien le mĂȘme type de
guillemets pour indiquer le début et la fin de la chaßne de caractÚres (par exemple 'abc' ).
Enfin, les valeurs logiques sâindiquent avec TRUE pour vrai et FALSE pour faux. Il est aussi possible
dâutiliser les raccourcis T et F . Attention Ă bien utiliser les majuscules, R Ă©tant sensible Ă la casse.
R> class(TRUE)
[1] "logical"
â 73 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
En plus des types de base, il existe de nombreuses autres classes de vecteurs dans R que nous aborderons
ultĂ©rieurement dans dâautres chapitres. Les plus courantes sont :
Classe R Type
Création
La fonction c
Pour créer un vecteur, on utilisera la fonction c , la lettre «c» étant un raccourci du mot anglais combine
puisque cette fonction permet de combiner des valeurs individuelles dans un vecteur unique. Il suffit de
lui passer la liste des valeurs Ă combiner :
R> class(taille)
[1] "numeric"
â 74 â
Vecteurs, indexation et assignation
R> class(sexe)
[1] "character"
R> class(urbain)
[1] "logical"
Nous lâavons vu, toutes les valeurs dâun vecteur doivent obligatoirement ĂȘtre du mĂȘme type. DĂšs lors, si
on essaie de combiner des valeurs de différents types, R essaiera de les convertir au mieux. Par exemple :
R> class(x)
[1] "character"
Dans le cas présent, toutes les valeurs ont été converties en chaßnes de caractÚres.
La fonction rep
Dans certaines situations, on peut avoir besoin de crĂ©er un vecteur dâune certaine longueur mais dont
toutes les valeurs sont identiques. Cela se rĂ©alise facilement avec rep Ă qui on indiquera la valeur Ă
répéter puis le nombre de répétitions :
â 75 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
[1] 2 2 2 2 2 2 2 2 2 2
On peut aussi lui indiquer plusieurs valeurs qui seront alors répétées en boucle :
La fonction seq
Dans dâautres situations, on peut avoir besoin de crĂ©er un vecteur contenant une suite de valeurs, ce qui se
rĂ©alise aisĂ©ment avec seq Ă qui on prĂ©cisera les arguments from (point de dĂ©part), to (point dâarrivĂ©e)
et by (pas). Quelques exemples valent mieux quâun long discours :
[1] 1 2 3 4 5 6 7 8 9 10
[1] 5 7 9 11 13 15 17
R> seq(10, 0)
[1] 10 9 8 7 6 5 4 3 2 1 0
[1] 100 90 80 70 60 50 40 30 20 10
â 76 â
Vecteurs, indexation et assignation
[1] 1.23 1.56 1.89 2.22 2.55 2.88 3.21 3.54 3.87 4.20 4.53
[12] 4.86 5.19 5.52
LâopĂ©rateur :
LâopĂ©rateur : est un raccourci de la fonction seq pour crĂ©er une suite de nombres entiers. Il sâutilise
ainsi :
R> 1:5
[1] 1 2 3 4 5
R> 24:32
[1] 24 25 26 27 28 29 30 31 32
R> 55:43
[1] 55 54 53 52 51 50 49 48 47 46 45 44 43
Nous verrons un peu plus loin que ce raccourci est fort pratique.
R> length(taille)
[1] 4
â 77 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
[1] 2
Il est possible de faire un vecteur de longueur nulle avec c() . Bien évidemment sa longueur est zéro.
R> length(c())
[1] 0
R> LETTERS
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N"
[15] "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
R> letters
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n"
[15] "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
R> length(letters)
[1] 26
â 78 â
Vecteurs, indexation et assignation
R> [Link]
R> [Link]
[1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep"
[10] "Oct" "Nov" "Dec"
R> length([Link])
[1] 12
R> pi
[1] 3.141593
R> length(pi)
[1] 1
[1] 4
â 79 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
[1] 6
[1] 2 1 3 4 9 1 2 6 3 0
R> length(z)
[1] 10
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n"
[15] "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" "A" "B"
[29] "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P"
[43] "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
R> length(min_maj)
[1] 52
Valeurs manquantes
Lorsquâon travaille avec des donnĂ©es dâenquĂȘte, il est frĂ©quent que certaines donnĂ©es soient manquantes,
en raison dâun refus du participant de rĂ©pondre Ă une question donnĂ©e ou dâun oubli ou dâun
dysfonctionnement du matériel de mesure, etc.
Une valeur manquante sâindique sous R avec NA (pour not available). Cette valeur peut sâappliquer Ă
nâimporte quel type de vecteur, quâil soit numĂ©rique, textuel ou logique.
â 80 â
Vecteurs, indexation et assignation
Les valeurs manquantes sont prises en compte dans le calcul de la longueur du vecteur.
R> length(taille)
[1] 6
Il ne faut pas confondre NA avec un autre objet quâon rencontre sous R qui sâappelle NULL et qui
reprĂ©sente lâ«objet vide». NULL ne contient absolument rien. La diffĂ©rence se comprend mieux lorsquâon
essaie de combiner ces objets :
NULL
[1] 0
On peut combiner NULL avec NULL , du vide plus du vide renverra toujours du vide dont la dimension est
égale à zéro.
[1] NA NA NA
[1] 3
Par contre, un vecteur composĂ© de trois valeurs manquantes a une longueur de 3, mĂȘme si toutes ses
valeurs sont manquantes.
â 81 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Pour rappel, les crochets sâobtiennent sur un clavier français de type PC en appuyant sur la touche
Alt Gr et la touche ( ou ) .
Commençons par lâindexation par position encore appelĂ©e indexation directe. Ce mode le plus simple
dâindexation consiste Ă indiquer la position des Ă©lĂ©ments Ă conserver.
R> taille
R> taille[1]
[1] 1.88
R> taille[1:3]
[1] NA 1.76 NA
â 82 â
Vecteurs, indexation et assignation
R> taille[length(taille)]
[1] NA
Dans le cadre de lâindexation par position, il est Ă©galement possible de spĂ©cifier des nombres nĂ©gatifs,
auquel cas cela signifiera «toutes les valeurs sauf celles-là ». Par exemple :
Ă noter, si on indique une position au-delĂ de la longueur du vecteur, R renverra NA . Par exemple :
R> taille[23:25]
[1] NA NA NA
R> sexe <- c(Michel = "h", Anne = "f", Dominique = NA, Jean = "h", Claude = NA, M
arie = "f")
R> sexe
â 83 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> names(sexe)
Pour ajouter ou modifier les noms dâun vecteur, on doit attribuer un nouveau vecteur de noms :
R> sexe["Anna"]
Anna
"f"
Par contre il nâest pas possible dâutiliser lâopĂ©rateur - comme pour lâindexation directe. Pour exclure un
â 84 â
Vecteurs, indexation et assignation
Ă©lĂ©ment en fonction de son nom, on doit utiliser une autre forme dâindexation, lâindexation par condition,
expliquĂ©e dans la section suivante. On peut ainsi faireâŠ
⊠pour sĂ©lectionner tous les Ă©lĂ©ments sauf celui qui sâappelle «Dom».
R> sexe
Michael John
"h" "h"
Ăcrire manuellement une telle condition nâest pas trĂšs pratique Ă lâusage. Mais supposons que nous ayons
également à notre disposition les deux vecteurs suivants, également de longueur 6.
Le vecteur urbain est un vecteur logique. On peut directement lâutiliser pour avoir le sexe des enquĂȘtĂ©s
habitant en milieu urbain :
R> sexe[urbain]
Supposons quâon souhaite maintenant avoir la taille des individus pesant 80 kilogrammes ou plus. Nous
pouvons effectuer une comparaison Ă lâaide des opĂ©rateurs de comparaison suivants :
â 85 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
== Ă©gal Ă
!= différent de
Que sâest-il passĂ© ? Nous avons fourni Ă R une condition et il nous a renvoyĂ© un vecteur logique avec autant
dâĂ©lĂ©ments quâil y a dâobservations et dont la valeur est TRUE si la condition est remplie et FALSE dans
les autres cas. Nous pouvons alors utiliser ce vecteur logique pour obtenir la taille des participants pesant
80 kilogrammes ou plus :
On peut combiner ou modifier des conditions Ă lâaide des opĂ©rateurs logiques habituels :
& et logique
| ou logique
! négation logique
Comment les utilise-t-on ? Voyons tout de suite un exemple. Supposons que je veuille identifier les
personnes pesant 80 kilogrammes ou plus et vivant en milieu urbain :
â 86 â
Vecteurs, indexation et assignation
Les résultats sont différents si je souhaite isoler les personnes pesant 80 kilogrammes ou plus ou vivant
milieu urbain :
Une remarque importante : quand lâun des termes dâune condition comporte une valeur manquante ( NA ),
le rĂ©sultat de cette condition nâest pas toujours TRUE ou FALSE , il peut aussi ĂȘtre Ă son tour une valeur
manquante.
R> taille
Une autre consĂ©quence importante de ce comportement est quâon ne peut pas utiliser lâopĂ©rateur
lâexpression == NA pour tester la prĂ©sence de valeurs manquantes. On utilisera Ă la place la fonction ad
hoc [Link] :
Pour compliquer encore un peu le tout, lorsquâon utilise une condition pour lâindexation, si la condition
renvoie NA , R ne sĂ©lectionne pas lâĂ©lĂ©ment mais retourne quand mĂȘme la valeur NA . Ceci a donc des
consĂ©quences sur le rĂ©sultat dâune indexation par comparaison.
Par exemple si je cherche Ă connaĂźtre le poids des personnes mesurant 1,80 mĂštre ou plus :
â 87 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> taille
R> poids
[1] 80 63 75 87 82 67
[1] 80 NA 87 NA
Les Ă©lĂ©ments pour lesquels la taille nâest pas connue ont Ă©tĂ© transformĂ©s en NA , ce qui nâinfluera pas le
calcul dâune moyenne. Par contre, lorsquâon utilisera assignation et indexation ensemble, cela peut crĂ©er
des problĂšmes. Il est donc prĂ©fĂ©rable lorsquâon a des valeurs manquantes de les exclure ainsi :
[1] 80 87
Pour plus de détails sur les conditions et le calcul logique dans R, on pourra se référer au chapitre dédié,
page 1137.
Mais lâindexation peut Ă©galement ĂȘtre placĂ©e Ă gauche de cet opĂ©rateur dâassignation. Dans ce cas, les
Ă©lĂ©ments sĂ©lectionnĂ©s par lâindexation sont alors remplacĂ©s par les valeurs indiquĂ©es Ă droite de
lâopĂ©rateur <- .
â 88 â
Vecteurs, indexation et assignation
[1] 1 2 3 4 5
[1] 3 2 3 4 5
Cette fois, au lieu dâutiliser quelque chose comme x <- v[1] , qui aurait placĂ© la valeur du premier
élément de v dans x , on a utilisé v[1] <- 3 , ce qui a mis à jour le premier élément de v avec la valeur
3. Ceci fonctionne Ă©galement pour les diffĂ©rents types dâindexation Ă©voquĂ©s prĂ©cĂ©demment :
Enfin on peut modifier plusieurs Ă©lĂ©ments dâun seul coup soit en fournissant un vecteur, soit en profitant
du mécanisme de recyclage. Les deux commandes suivantes sont ainsi rigoureusement équivalentes :
Lâassignation par indexation peut aussi ĂȘtre utilisĂ©e pour ajouter une ou plusieurs valeurs Ă un vecteur :
R> length(sexe)
[1] 6
R> length(sexe)
[1] 7
â 89 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
En résumé
âą Un vecteur est un objet unidimensionnel contenant une liste de valeurs qui sont toutes du mĂȘme
type (entiÚres, numériques, textuelles ou logiques).
âą La fonction class permet de connaĂźtre le type du vecteur et la fonction length sa longueur,
câest-Ă -dire son nombre dâĂ©lĂ©ments.
⹠La fonction c sert à créer et à combiner des vecteurs.
⹠Les valeurs manquantes sont représentées avec NA .
âą Un vecteur peut ĂȘtre nommĂ©, câest-Ă -dire quâun nom textuel a Ă©tĂ© associĂ© Ă chaque Ă©lĂ©ment. Cela
peut se faire lors de sa création ou avec la fonction names .
âą Lâindexation consiste Ă extraire certains Ă©lĂ©ments dâun vecteur. Pour cela, on indique ce quâon
souhaite extraire entre crochets ( [] ) juste aprĂšs le nom du vecteur. Le type dâindexation
dĂ©pend du type dâinformation transmise.
âą Sâil sâagit de nombres entiers, câest lâindexation par position : les nombres reprĂ©sentent la
position dans le vecteur des Ă©lĂ©ments quâon souhaite extraire. Un nombre nĂ©gatif sâinterprĂšte
comme «tous les éléments sauf celui-là ».
âą Si on indique des chaĂźnes de caractĂšres, câest lâindexation par nom : on indique le nom des
Ă©lĂ©ments quâon souhaite extraire. Cette forme dâindexation ne fonctionne que si le vecteur est
nommé.
âą Si on transmet des valeurs logiques, le plus souvent sous la forme dâune condition, câest
lâindexation par condition : TRUE indique les Ă©lĂ©ments Ă extraire et FALSE les Ă©lĂ©ments Ă
exclure. Il faut ĂȘtre vigilant aux valeurs manquantes ( NA ) dans ce cas prĂ©cis.
âą Enfin, il est possible de ne modifier que certains Ă©lĂ©ments dâun vecteur en ayant recours Ă la fois
Ă lâindexation ( [] ) et Ă lâassignation ( <- ).
â 90 â
Listes et Tableaux de
données
Listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Propriétés et création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Indexation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Tableaux de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Propriétés et création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Indexation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Afficher les données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
GUIDE-R
Une version actualisée de ce chapitre est disponible sur guide-R : Listes & Tableaux de données
NOTE
Il est prĂ©fĂ©rable dâavoir dĂ©jĂ lu le chapitre Vecteurs, indexation et assignation, page 71 avant dâaborder
celui-ci.
WEBIN-R
Ce chapitre est évoqué dans le webin-R #02 (les bases du langage R) sur YouTube.
â 91 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Listes
Par nature, les vecteurs ne peuvent contenir que des valeurs de mĂȘme type (numĂ©rique, textuel ou
logique). Or, on peut avoir besoin de reprĂ©senter des objets plus complexes composĂ©s dâĂ©lĂ©ments
disparates. Câest ce que permettent les listes.
Propriétés et création
Une liste se crée tout simplement avec la fonction list :
[[1]]
[1] 1 2 3 4 5
[[2]]
[1] "abc"
Une liste est un ensemble dâobjets, quels quâils soient, chaque Ă©lĂ©ment dâune liste pouvant avoir ses
propres dimensions. Dans notre exemple précédent, nous avons créé une liste l1 composée de deux
Ă©lĂ©ments : un vecteur dâentiers de longueur 5 et un vecteur textuel de longueur 1. La longueur dâune liste
correspond aux nombres dâĂ©lĂ©ments quâelle contient et sâobtient avec length :
R> length(l1)
[1] 2
Comme les vecteurs, une liste peut ĂȘtre nommĂ©e et les noms des Ă©lĂ©ments dâune liste sont accessibles
avec names :
$minuscules
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n"
[15] "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
â 92 â
Listes et Tableaux de données
$majuscules
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N"
[15] "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
$mois
[1] "January" "February" "March" "April"
[5] "May" "June" "July" "August"
[9] "September" "October" "November" "December"
R> length(l2)
[1] 3
R> names(l2)
R> length(l)
[1] 2
Eh bien non ! Elle est de longueur 2 car nous avons créé une liste composée de deux éléments qui sont
eux-mĂȘmes des listes. Cela est plus lisible si on fait appel Ă la fonction str qui permet de visualiser la
structure dâun objet.
R> str(l)
List of 2
$ :List of 2
..$ : int [1:5] 1 2 3 4 5
..$ : chr "abc"
$ :List of 3
..$ minuscules: chr [1:26] "a" "b" "c" "d" ...
â 93 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Une liste peut contenir tous types dâobjets, y compris dâautres listes. Pour combiner les Ă©lĂ©ments dâune
liste, il faut utiliser la fonction append :
[1] 5
R> str(l)
List of 5
$ : int [1:5] 1 2 3 4 5
$ : chr "abc"
$ minuscules: chr [1:26] "a" "b" "c" "d" ...
$ majuscules: chr [1:26] "A" "B" "C" "D" ...
$ mois : chr [1:12] "January" "February" "March" "April" ...
On peut noter en passant quâune liste peut tout Ă fait nâĂȘtre que partiellement nommĂ©e.
Indexation
Les crochets simples ( [] ) fonctionnent comme pour les vecteurs. On peut utiliser Ă la fois lâindexation
par position, lâindexation par nom et lâindexation par condition.
R> l
[[1]]
[1] 1 2 3 4 5
[[2]]
[1] "abc"
$minuscules
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n"
[15] "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
$majuscules
â 94 â
Listes et Tableaux de données
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N"
[15] "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
$mois
[1] "January" "February" "March" "April"
[5] "May" "June" "July" "August"
[9] "September" "October" "November" "December"
[[1]]
[1] 1 2 3 4 5
$minuscules
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n"
[15] "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
$majuscules
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N"
[15] "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
$majuscules
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N"
[15] "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
$minuscules
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n"
[15] "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
[[1]]
[1] 1 2 3 4 5
[[2]]
[1] "abc"
$mois
[1] "January" "February" "March" "April"
â 95 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
MĂȘme si on extrait un seul Ă©lĂ©ment, lâextraction obtenue avec les crochets simples renvoie toujours une
liste, ici composĂ©e dâun seul Ă©lĂ©ment :
R> str(l[1])
List of 1
$ : int [1:5] 1 2 3 4 5
Supposons que je souhaite calculer la moyenne des valeurs du premier élément de ma liste. Essayons la
commande suivante :
R> mean(l[1])
[1] NA
Nous obtenons un message dâerreur. En effet, R ne sait pas calculer une moyenne Ă partir dâune liste. Ce
quâil lui faut, câest un vecteur de valeurs numĂ©riques. Autrement dit, ce que nous cherchons Ă obtenir câest
le contenu mĂȘme du premier Ă©lĂ©ment de notre liste et non une liste Ă un seul Ă©lĂ©ment.
Câest ici que les doubles crochets ( [[]] ) vont rentrer en jeu. Pour ces derniers, nous pourrons utiliser
lâindexation par position ou lâindexation par nom, mais pas lâindexation par condition. De plus, le critĂšre
quâon indiquera doit indiquer un et un seul Ă©lĂ©ment de notre liste. Au lieu de renvoyer une liste Ă un
Ă©lĂ©ment, les doubles crochets vont renvoyer lâĂ©lĂ©ment dĂ©signĂ©. Vite, un exemple :
R> str(l[1])
List of 1
$ : int [1:5] 1 2 3 4 5
R> str(l[[1]])
int [1:5] 1 2 3 4 5
â 96 â
Listes et Tableaux de données
R> mean(l[[1]])
[1] 3
R> l[["mois"]]
Mais il faut avouer que cette écriture avec doubles crochets et guillemets est un peu lourde.
Heureusement, un nouvel acteur entre en scĂšne : le symbole dollar ( $ ). Câest un raccourci des doubles
crochets pour lâindexation par nom quâon utilise ainsi :
R> l$mois
Les écritures l$mois et l[["mois"]] sont équivalentes. Attention ! Cela ne fonctionne que pour
lâindexation par nom.
R> l$1
Lâassignation par indexation fonctionne Ă©galement avec les doubles crochets ou le signe dollar :
[[1]]
[1] 1 2 3 4 5
[[2]]
[[2]][[1]]
â 97 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
$minuscules
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n"
[15] "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
$majuscules
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N"
[15] "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
$mois
[1] "Janvier" "Février" "Mars"
Tableaux de données
Il y a un type dâobjets que nous avons dĂ©jĂ abordĂ© dans le chapitre Premier travail avec les donnĂ©es,
page 35, il sâagit du tableau de donnĂ©es ou data frame en anglais.
Propriétés et création
Dans R, les tableaux de données sont tout simplement des listes avec quelques propriétés spécifiques :
DĂšs lors, un tableau de donnĂ©es correspond aux fichiers de donnĂ©es quâon a lâhabitude de manipuler dans
dâautres logiciels de statistiques comme SPSS ou Stata. Les variables sont organisĂ©es en colonnes et les
observations en lignes.
â 98 â
Listes et Tableaux de données
R> str(df)
NOTE
Depuis la version 4.0.0, lâoption stringsAsFactors vaut maintenant FALSE par dĂ©faut.
R> str(df)
Un tableau de donnĂ©es Ă©tant une liste, la fonction length renverra le nombre dâĂ©lĂ©ments de la liste, donc
dans le cas présent le nombre de variables, et names leurs noms :
R> length(df)
[1] 3
â 99 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> names(df)
Comme tous les Ă©lĂ©ments dâun tableau de donnĂ©es ont la mĂȘme longueur, cet objet peut ĂȘtre vu comme
bidimensionnel. Les fonctions nrow , ncol et dim donnent respectivement le nombre de lignes, le
nombre de colonnes et les dimensions de notre tableau.
R> nrow(df)
[1] 4
R> ncol(df)
[1] 3
R> dim(df)
[1] 4 3
De plus, tout comme les colonnes ont un nom, il est aussi possible de nommer les lignes avec [Link] :
Indexation
Les tableaux de données étant des listes, nous pouvons donc utiliser les crochets simples ( [] ), les
crochets doubles ( [[]] ) et le symbole dollar ( $ ) pour extraire des parties de notre tableau, de la mĂȘme
maniĂšre que pour nâimporte quelle liste.
R> df[1]
â 100 â
Listes et Tableaux de données
R> df[[1]]
R> df$sexe
Cependant, un tableau de donnĂ©es Ă©tant un objet bidimensionnel, il est Ă©galement possible dâextraire des
données sur deux dimensions, à savoir un premier critÚre portant sur les lignes et un second portant sur
les colonnes. Pour cela, nous utiliserons les crochets simples ( [] ) en séparant nos deux critÚres par une
virgule ( , ).
Un premier exemple :
R> df
R> df[3, 2]
[1] 29
Cette premiĂšre commande indique que nous souhaitons la troisiĂšme ligne de la seconde colonne,
autrement dit lâĂąge de Michael. Le mĂȘme rĂ©sultat peut ĂȘtre obtenu avec lâindexation par nom, lâindexation
par condition, ou un mélange de tout ça.
[1] 29
[1] 29
[1] 29
â 101 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> df["Michael", 2]
[1] 29
Il est également possible de préciser un seul critÚre. Par exemple, si je souhaite les deux premiÚres
observations, ou les variables sexe et blond :
R> df[1:2, ]
Il a suffi de laisser un espace vide avant ou aprÚs la virgule. ATTENTION ! Il est cependant impératif de
laisser la virgule pour indiquer Ă R quâon souhaite effectuer une indexation Ă deux dimensions. Si on oublie
la virgule, cela nous ramĂšne au mode de fonctionnement des listes. Et le rĂ©sultat nâest pas forcĂ©ment le
mĂȘme :
R> df[2, ]
R> df[, 2]
[1] 52 31 29 35
R> df[2]
â 102 â
Listes et Tableaux de données
NOTE
R> str(df[2, ])
num [1:4] 52 31 29 35
R> str(df[2])
R> str(df[[2]])
num [1:4] 52 31 29 35
df[2, ] signifie quâon veut toutes les variables pour le second individu. Le rĂ©sultat est un tableau de
donnĂ©es Ă une ligne et trois colonnes. df[2] correspond au mode dâextraction des listes et renvoie
donc une liste Ă un Ă©lĂ©ment, en lâoccurrence un tableau de donnĂ©es Ă quatre observations et une
variable. df[[2]] quant à lui renvoie le contenu de cette variable, soit un vecteur numérique de
longueur quatre. Reste df[, 2] qui renvoie toutes les observations pour la seconde colonne. Or
lâindexation bidimensionnelle a un fonctionnement un peu particulier : par dĂ©faut elle renvoie un
tableau de donnĂ©es mais sâil y a une seule variable dans lâextraction, câest un vecteur qui est renvoyĂ©.
Pour plus de dĂ©tails, on pourra consulter lâentrĂ©e dâaide de [.[Link] .
â 103 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
dans lâextension questionr et correspondant Ă un extrait de lâenquĂȘte Histoire de vie rĂ©alisĂ©e par lâINSEE en
2003. Il contient 2000 individus et 20 variables.
R> library(questionr)
data(hdv2003)
d <- hdv2003
Si on demande dâafficher lâobjet d dans la console (rĂ©sultat non reproduit ici), R va afficher lâensemble du
contenu de d Ă lâĂ©cran ce qui, sur un tableau de cette taille, ne sera pas trĂšs lisible. Pour une exploration
visuelle, le plus simple est souvent dâutiliser la visionneuse intĂ©grĂ©e Ă RStudio et quâon peut appeler avec
la fonction View .
R> View(d)
Les fonctions head et tail , qui marchent Ă©galement sur les vecteurs, permettent dâafficher seulement
les premiĂšres (respectivement les derniĂšres) lignes dâun tableau de donnĂ©es :
R> head(d)
R> tail(d, 2)
Lâextension dplyr, que nous nâaborderons en dĂ©tails que plus tard, page 241, propose une fonction
glimpse (ce qui signifie «aperçu» en anglais) qui permet de visualiser rapidement et de maniÚre
condensĂ©e le contenu dâun tableau de donnĂ©es.
R> library(dplyr)
glimpse(d)
Rows: 2,000
Columns: 20
$ id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1âŠ
$ age <int> 28, 23, 59, 34, 71, 35, 60, 47, 20, âŠ
$ sexe <fct> Femme, Femme, Homme, Homme, Femme, FâŠ
$ nivetud <fct> "Enseignement superieur y compris teâŠ
$ poids <dbl> 2634.3982, 9738.3958, 3994.1025, 573âŠ
$ occup <fct> "Exerce une profession", "Etudiant, âŠ
$ qualif <fct> Employe, NA, Technicien, Technicien,âŠ
$ [Link] <int> 8, 2, 2, 1, 0, 5, 1, 5, 4, 2, 3, 4, âŠ
$ clso <fct> Oui, Oui, Non, Non, Oui, Non, Oui, NâŠ
$ relig <fct> Ni croyance ni appartenance, Ni croyâŠ
$ [Link] <fct> Peu important, NA, Aussi important qâŠ
$ [Link] <fct> Insatisfaction, NA, Equilibre, SatisâŠ
$ [Link] <fct> Non, Non, Non, Non, Non, Non, Non, NâŠ
â 104 â
Listes et Tableaux de données
Lâextension labelled propose une fonction look_for qui permet de lister les diffĂ©rentes variables dâun
fichier de données :
R> library(labelled)
look_for(d)
Femme
1er cycle
2eme cycle
â 105 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Chomeur
Etudiant, eleve
Retraite
Au foyer
Autre inactif
Ouvrier qualifie
Technicien
Profession intermediaire
Cadre
Employe
Autre
Non
Ne sait pas
Pratiquant occasionnel
Ni croyance ni appartenance
Rejet
NSP ou NVPR
â 106 â
Listes et Tableaux de données
Peu important
Insatisfaction
Equilibre
Oui
Oui
Oui
Oui
Oui
Oui
Oui
Lorsquâon a un gros tableau de donnĂ©es avec de nombreuses variables, il peut ĂȘtre difficile de retrouver la
ou les variables dâintĂ©rĂȘt. Il est possible dâindiquer Ă look_for un mot-clĂ© pour limiter la recherche. Par
exemple :
â 107 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Il est Ă noter que si la recherche nâest pas sensible Ă la casse (i.e. aux majuscules et aux minuscules), elle est
sensible aux accents.
La mĂ©thode summary qui fonctionne sur tout type dâobjet permet dâavoir quelques statistiques de base
sur les différentes variables de notre tableau, les statistiques affichées dépendant du type de variable.
R> summary(d)
id age sexe
Min. : 1.0 Min. :18.00 Homme: 899
1st Qu.: 500.8 1st Qu.:35.00 Femme:1101
Median :1000.5 Median :48.00
Mean :1000.5 Mean :48.16
3rd Qu.:1500.2 3rd Qu.:60.00
Max. :2000.0 Max. :97.00
nivetud
Enseignement technique ou professionnel court :463
Enseignement superieur y compris technique superieur:441
Derniere annee d'etudes primaires :341
1er cycle :204
2eme cycle :183
(Other) :256
NA's :112
poids occup
Min. : 78.08 Exerce une profession:1049
1st Qu.: 2221.82 Chomeur : 134
Median : 4631.19 Etudiant, eleve : 94
Mean : 5535.61 Retraite : 392
3rd Qu.: 7626.53 Retire des affaires : 77
Max. :31092.14 Au foyer : 171
Autre inactif : 83
â 108 â
Listes et Tableaux de données
qualif [Link]
Employe :594 Min. : 0.000
Ouvrier qualifie :292 1st Qu.: 1.000
Cadre :260 Median : 2.000
Ouvrier specialise :203 Mean : 3.283
Profession intermediaire:160 3rd Qu.: 5.000
(Other) :144 Max. :22.000
NA's :347
clso relig
Oui : 936 Pratiquant regulier :266
Non :1037 Pratiquant occasionnel :442
Ne sait pas: 27 Appartenance sans pratique :760
Ni croyance ni appartenance:399
Rejet : 93
NSP ou NVPR : 40
[Link] [Link]
Le plus important : 29 Satisfaction :480
Aussi important que le reste:259 Insatisfaction:117
Moins important que le reste:708 Equilibre :451
Peu important : 52 NA's :952
NA's :952
â 109 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> summary(d$sexe)
Homme Femme
899 1101
R> summary(d$age)
Lâextension questionr fournit Ă©galement une fonction bien pratique pour dĂ©crire les diffĂ©rentes variables
dâun tableau de donnĂ©es. Il sâagit de describe . Faisons de suite un essai :
R> describe(d)
â 110 â
Listes et Tableaux de données
------------------------------------------------------------
poids
n missing distinct Info Mean Gmd
2000 0 1877 1 5536 4553
.05 .10 .25 .50 .75 .90
799.8 1161.7 2221.8 4631.2 7626.5 10819.0
.95
13647.9
â 111 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
1653 347 7
lowest : 0 1 2 3 4, highest: 14 15 16 18 22
â 112 â
Listes et Tableaux de données
â 113 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
lowest : 0.0 0.1 0.2 0.3 0.4, highest: 8.0 9.0 10.0 11.0 12.0
------------------------------------------------------------
Comme on le voit sur cet exemple, describe nous affiche le type des variables, les premiĂšres valeurs de
chacune, le nombre de valeurs manquantes, le nombre de valeurs différentes (uniques) ainsi que quelques
autres informations suivant le type de variables.
Il est possible de restreindre lâaffichage Ă seulement quelques variables en indiquant le nom de ces
derniĂšres.
â 114 â
Listes et Tableaux de données
age [Link]
â 115 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
------------------------------------------------------------
poids
n missing distinct Info Mean Gmd
2000 0 1877 1 5536 4553
.05 .10 .25 .50 .75 .90
799.8 1161.7 2221.8 4631.2 7626.5 10819.0
.95
13647.9
â 116 â
Listes et Tableaux de données
.95
9
lowest : 0 1 2 3 4, highest: 14 15 16 18 22
â 117 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
â 118 â
Listes et Tableaux de données
lowest : 0.0 0.1 0.2 0.3 0.4, highest: 8.0 9.0 10.0 11.0 12.0
------------------------------------------------------------
R> describe(d$sexe)
d$sexe
n missing distinct
2000 0 2
En résumé
Les Listes
âą Les listes sont des objets unidimensionnels pouvant contenir tout type dâobjet, y compris
dâautres listes.
âą Elles ont une longueur quâon obtient avec length .
⹠On crée une liste avec list et on peut fusionner des listes avec append .
â 119 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
âą Tout comme les vecteurs, les listes peuvent ĂȘtre nommĂ©es et les noms des Ă©lĂ©ments sâobtiennent
avec names .
âą Les crochets simples ( [] ) permettent de sĂ©lectionner les Ă©lĂ©ments dâune liste, en utilisant
lâindexation par position, lâindexation par nom ou lâindexation par condition. Cela renvoie
toujours une autre liste.
âą Les doubles crochets ( [[]] ) renvoient directement le contenu dâun Ă©lĂ©ment de la liste quâon
aura sélectionné par position ou par nom.
⹠Le symbole $ est un raccourci pour facilement sélectionner un élément par son nom,
liste$nom étant équivalent à liste[["nom"]] .
⹠Les tableaux de données sont des listes avec des propriétés particuliÚres :
i. tous les éléments sont des vecteurs ;
ii. tous les vecteurs ont la mĂȘme longueur ;
iii. tous les vecteurs ont un nom et ce nom est unique.
⹠On peut créer un tableau de données avec [Link] .
âą Les tableaux de donnĂ©es correspondent aux fichiers de donnĂ©es quâon utilise usuellement dans
dâautres logiciels de statistiques : les variables sont reprĂ©sentĂ©es en colonnes et les observations
en lignes.
âą Ce sont des objets bidimensionnels : ncol renvoie le nombre de colonnes et nrow le nombre
de lignes.
âą Les doubles crochets ( [[]] ) et le symbole dollar ( $ ) fonctionnent comme pour les listes et
permettent dâaccĂ©der aux variables.
âą Il est possible dâutiliser des coordonnĂ©es bidimensionnelles avec les crochets simples ( [] ) en
indiquant un critÚre sur les lignes puis un critÚre sur les colonnes, séparés par une virgule ( , ).
â 120 â
Facteurs et vecteurs
labellisés
Facteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Vecteurs labellisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Les étiquettes de variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Les étiquettes de valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Assignation et condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Quelques fonctions supplémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
GUIDE-R
Une version actualisĂ©e de ce chapitre est disponible sur guide-R : Facteurs et forcats, Ătiquettes de
variables, Ătiquettes de valeurs & Valeurs manquantes
WEBIN-R
Ce chapitre est évoqué dans le webin-R #02 (les bases du langage R) sur YouTube.
Dans le chapire sur les vecteurs, page 71, nous avons abordé les types fondementaux de vecteurs
(numériques, textuels, logiques). Mais il existe de nombreux autres classes de vecteurs afin de représenter
des données diverses (comme les dates). Dans ce chapitre, nous nous intéressons plus particuliÚrement
aux variables catégorielles.
Les facteurs (ou factors an anglais) sont un type de vecteur géré nativement par R et utilisés dans de
nombreux domaines (modĂšles statistiques, reprĂ©sentations graphiques, âŠ).
Les facteurs sont souvent mis en regard des donnĂ©es labellisĂ©es telles quâelles sont utilisĂ©es dans dâautres
logiciels comme SPSS ou Stata. Or, les limites propres aux facteurs font quâils ne sont pas adpatĂ©s pour
rendre compte des différents usages qui sont fait des données labellisées. Plusieurs extensions (telles que
â 121 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
memisc ou Hmisc) ont proposĂ© leur propre solution qui, bien quâelles apportaient un plus pour la gestion
des données labellisées, ne permettaient pas que celles-ci soient utilisées en dehors de ces extensions ou
des extensions compatibles. Nous aborderons ici une nouvelle classe de vecteurs, la classe labelled ,
introduite par lâextension haven (que nous aborderons dans le cadre de lâimport de donnĂ©es, page 149) et
qui peut ĂȘtre manipulĂ©e avec lâextension homonyme labelled.
Facteurs
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.
R> library(questionr)
data(hdv2003)
d <- hdv2003
R> str(d)
â 122 â
Facteurs et vecteurs labellisés
Nous voyons que de nombreuses variables de ce tableau de données, telles que sexe ou nivetud, sont
du type facteur.
Les facteurs prennent leurs valeurs dans un ensemble de modalités prédéfinies et ne peuvent en prendre
dâautres. La liste des valeurs possibles est donnĂ©e par la fonction levels :
R> levels(d$sexe)
Si on veut modifier la valeur du sexe du premier individu de notre tableau de données avec une valeur non
autorisĂ©e, on obient un message dâerreur et une valeur manquante est utilisĂ©e Ă la place :
R> d$sexe[1]
[1] <NA>
Levels: Homme Femme
[1] Homme
Levels: Homme Femme
On peut trĂšs facilement crĂ©er un facteur Ă partir dâune variable textuelle avec la fonction factor :
â 123 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
[1] H H F H
Levels: F H
Par dĂ©faut, les niveaux dâun facteur nouvellement créés sont lâensemble des valeurs de la variable
textuelle, ordonnĂ©es par ordre alphabĂ©tique. Cette ordre des niveaux est utilisĂ© Ă chaque fois quâon utilise
des fonctions comme table , par exemple :
R> table(v)
v
F H
1 3
On peut modifier cet ordre au moment de la crĂ©ation du facteur en utilisant lâoption levels :
v
H F
3 1
On peut aussi modifier lâordre des niveaux dâune variable dĂ©jĂ existante :
â 124 â
Facteurs et vecteurs labellisés
58
NOTE
Lâextension questionr propose une interface interactive pour le rĂ©ordonnancement des niveaux dâun
facteur. Cette fonction, nommée iorder , vous permet de réordonner les modalités de maniÚre
graphique et de générer le code R correspondant.
Vous pouvez alors dĂ©placer les modalitĂ©s par glisser-dĂ©poser, vĂ©rifier le rĂ©sultat dans lâonglet
VĂ©rification et, une fois le rĂ©sultat satisfaisant, rĂ©cupĂ©rer le code gĂ©nĂ©rĂ© pour lâinclure dans votre
script.
â 125 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
On peut Ă©galement modifier les niveaux eux-mĂȘmes. Imaginons que lâon souhaite crĂ©er une nouvelle
variable [Link] contenant les noms abrégés des catégories socioprofessionnelles de qualif. On peut
alors procéder comme suit :
Dans ce qui précÚde, le paramÚtre levels de factor permet de spécifier quels sont les niveaux retenus
dans le facteur résultat, ainsi que leur ordre. Le paramÚtre labels , lui, permet de modifier les noms
de ces niveaux dans le facteur rĂ©sultat. Il est donc capital dâindiquer les noms de labels exactement
dans le mĂȘme ordre que les niveaux de levels . Pour sâassurer de ne pas avoir commis dâerreur, il est
recommandĂ© dâeffectuer un tableau croisĂ© entre lâancien et le nouveau facteur :
Autre
Ouvrier specialise 0
Ouvrier qualifie 0
Employe 0
Technicien 0
Profession intermediaire 0
Cadre 0
Autre 58
â 126 â
Facteurs et vecteurs labellisés
On a donc ici un premier moyen dâeffectuer un recodage des modalitĂ©s dâune variable de type facteur.
Dâautres mĂ©thodes existent, que nous aborderons dans le chapitre Recodage, page 201.
à noter que par défaut, les valeurs manquantes ne sont pas considérées comme un niveau de facteur. On
peut cependant les transformer en niveau en utilisant la fonction addNA . Ceci signifie cependant quâelle
ne seront plus considérées comme manquantes par R mais comme une modalité à part entiÚre :
R> summary(d$[Link])
R> summary(addNA(d$[Link]))
La fonction addNAstr de lâextension questionr fait la mĂȘme chose mais permet de spĂ©cifier lâĂ©tiquette de
la modalité des valeurs manquantes.
R> library(questionr)
summary(addNAstr(d$[Link], "Manquant"))
Vecteurs labellisés
Nous abordons ici une nouvelle classe de vecteurs, la classe haven_labelled , introduite récemment par
lâextension haven (que nous aborderons dans le cadre de lâimport de donnĂ©es, page 149) et qui peut ĂȘtre
manipulĂ©e avec lâextension homonyme labelled.
Pour cette section, nous allons utiliser dâautres donnĂ©es dâexemple, Ă©galement disponibles dans
lâextension questionr. Il sâagit dâun ensemble de trois tableaux de donnĂ©es ( menages , femmes et
enfants ) contenant les donnĂ©es dâune enquĂȘte de fĂ©conditĂ©. Commençons par les charger en mĂ©moire :
R> library(questionr)
data(fecondite)
Pour ailleurs, nous allons avoir besoin de lâextension labelled qui permet de manipuler ces donnĂ©es
â 127 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
labellisées.
R> library(labelled)
La visonneuse de donnĂ©es de RStudio sait reconnaĂźtre et afficher ces Ă©tiquettes de variable lorsquâelles
existent. Essayez par exemple la commande suivante :
R> View(femmes)
R> describe(femmes$id_femme)
Pour manipuler les Ă©tiquettes de variable, il suffit dâutiliser la fonction var_label de lâextension labelled.
R> var_label(femmes$id_menage)
â 128 â
Facteurs et vecteurs labellisés
NULL
NULL
Le fait dâajouter une Ă©tiquette Ă un vecteur ne modifie en rien son type. Regardons la structure de notre
objet v :
R> str(v)
num [1:5] 1 5 2 4 1
- attr(*, "label")= chr "Une autre étiquette"
Que voit-on ? Notre vecteur possĂšde maintenant ce quâon appelle un attribut, câest-Ă -dire une information
supplémentaire qui lui est attachée. Un objet peut avoir plusieurs attributs. Ici, notre étiquette de variable
â 129 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
est strockĂ© dans un attribut nommĂ© "label" . Cela ne modifie en rien sa nature. Il ne sâagit que
dâinformation en plus. Toutes les fonctions ne tiennent pas compte des Ă©tiquettes de variable. Peu
importe ! La prĂ©sence dâun attribut ne les empĂȘchera de fonctionner. De mĂȘme, mĂȘme si lâextension
labelled nâest pas installĂ©e sur votre machine, vous pourrez toujours manipuler vos donnĂ©es comme si de
rien nâĂ©tait.
On peut associer une Ă©tiquette de variable Ă nâimporte quel type de variable, quâelle soit numĂ©rique,
textuelle, un facteur ou encore des dates.
Lorsquâun vecteur possĂšde des Ă©tiquettes de valeur, sa classe change et devient labelled . Regardons
dĂ©jĂ quelques exemples. Tout dâabord, jetons un apercu au contenu de lâobjet femmes grace Ă la fonction
glimpse de lâextension dplyr.
R> library(dplyr)
glimpse(femmes)
Rows: 2,000
Columns: 17
$ id_femme <dbl> 391, 1643, 85, 881, 1981, 1072, 197âŠ
$ id_menage <dbl> 381, 1515, 85, 844, 1797, 1015, 179âŠ
$ poids <dbl> 1.803150, 1.803150, 1.803150, 1.803âŠ
$ date_entretien <date> 2012-05-05, 2012-01-23, 2012-01-21âŠ
$ date_naissance <date> 1997-03-07, 1982-01-06, 1979-01-01âŠ
$ age <dbl> 15, 30, 33, 43, 25, 18, 45, 23, 49,âŠ
$ milieu <dbl+lbl> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2âŠ
$ region <dbl+lbl> 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3âŠ
$ educ <dbl+lbl> 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0âŠ
$ travail <hvn_lbl_> 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, âŠ
$ matri <dbl+lbl> 0, 2, 2, 2, 1, 0, 1, 1, 2, 5, 2âŠ
$ religion <dbl+lbl> 1, 3, 2, 3, 2, 2, 3, 1, 3, 3, 2âŠ
$ journal <dbl+lbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0âŠ
$ radio <dbl+lbl> 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1âŠ
$ tv <dbl+lbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1âŠ
$ nb_enf_ideal <hvn_lbl_> 4, 4, 4, 4, 4, 5, 10, 5âŠ
$ test <hvn_lbl_> 0, 9, 0, 0, 1, 0, 0, 0, 0, 1, âŠ
â 130 â
Facteurs et vecteurs labellisés
R> class(femmes$region)
R> head(femmes$region)
Labels:
value label
1 Nord
2 Est
3 Sud
4 Ouest
Nous voyons que quatre étiquettes de valeurs ont été associées à notre variable. Le code 1 correspond
ainsi à la région «Nord», le code 2 à la région «Est», etc. Laissons de cÎté pour le moment la colonne is_na
que nous aborderons dans une prochaine section.
La liste des étiquettes est également renvoyée par la fonction describe de questionr.
R> describe(femmes$region)
n %
[1] Nord 707 35.4
[2] Est 324 16.2
[3] Sud 407 20.3
[4] Ouest 562 28.1
Total 2000 100.0
Lâextension labelled fournit la fonction val_labels qui renvoie la liste des Ă©tiquettes de valeurs dâune
variable sous la forme dâun vecteur nommĂ© et la fonction val_label (notez lâabsence de âsâ) qui renvoie
lâĂ©tiquette associĂ©e Ă une valeur particuliĂšre. Sâil nây a pas dâĂ©tiquette de valeur, ces fonctions renvoient
NULL .
â 131 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> val_labels(femmes$region)
R> val_label(femmes$region, 2)
[1] "Est"
R> val_label(femmes$region, 6)
NULL
R> val_labels(femmes$age)
NULL
Re-regardons dâun peu plus prĂšs les premiĂšres valeurs de notre variable region.
R> head(femmes$region)
Labels:
value label
1 Nord
2 Est
3 Sud
4 Ouest
On sâaperçoit quâil sâagit de valeurs numĂ©riques. Et lâaffichage indique que notre variable est plus
précisément du type labelled double . Pour rappel, double est synonyme de numeric . Autrement
dit, la classe haven_labelled ne modifie pas le type sous-jacent dâun vecteur, que lâon peut toujours
obtenir avec la fonction typeof . Nous pouvons également tester si notre variable est numérique avec la
fonction [Link] .
â 132 â
Facteurs et vecteurs labellisés
R> typeof(femmes$region)
[1] "double"
R> [Link](femmes$region)
[1] TRUE
Ă la diffĂ©rence des facteurs, le type original dâune variable labellisĂ©e nâest pas modifiĂ© par la prĂ©sence
dâĂ©tiquettes de valeur. Ainsi, il reste possible de calculer une moyenne Ă partir de notre variable region
(mĂȘme si cela nâest pas pertinent ici dâun point de vue sĂ©mantique).
R> mean(femmes$region)
[1] 2.412
R> mean(d$nivetud)
[1] NA
Nous allons voir quâil est aussi possible dâassocier des Ă©tiquettes de valeurs Ă des vecteurs textuels.
CrĂ©ons tout dâabord un vecteur textuel qui nous servira dâexemple.
Le plus facile pour lui associer des Ă©tiquettes de valeur est dâutiliser val_label .
â 133 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
<labelled<character>[5]>
[1] f f h f h
Labels:
value label
f femmes
h hommes
R> typeof(v)
[1] "character"
Notre vecteur v a automatiquement été transformé en un vecteur de la classe labelled . Mais son type
sous-jacent est restĂ© "character" . Par ailleurs, les donnĂ©es elle-mĂȘme nâont pas Ă©tĂ© modifiĂ©es et ont
conservé leurs valeurs originales.
Il est Ă©galement possible de dĂ©finir/modifier/supprimer lâensemble des Ă©tiquettes de valeur dâune variable
avec val_labels en lui assignant un vecteur nommé.
R> val_labels(v) <- c(Homme = "h", Femme = "f", "Valeur indéterminée" = "i")
v
<labelled<character>[5]>
[1] f f h f h
Labels:
value label
h Homme
f Femme
i Valeur indéterminée
Comme précédemment, on utilisera NULL pour supprimer une ou toutes les étiquettes.
<labelled<character>[5]>
â 134 â
Facteurs et vecteurs labellisés
[1] f f h f h
Labels:
value label
h Homme
f Femme
R> class(v)
[1] "character"
Si lâon supprime toutes les Ă©tiquettes de valeur, alors notre vecteur retrouve sa classe initiale.
Assignation et condition
Les Ă©tiquettes de valeur sont plus souples que les facteurs, en ce sens quâil nâest pas obligatoire dâindiquer
une Ă©tiquette pour chaque valeur prise par une variable. Alors quâil nâest pas possible avec un facteur
dâassigner une valeur qui nâa pas Ă©tĂ© prĂ©alablement dĂ©finie comme une des modalitĂ©s possibles du facteur,
nous nâavons pas cette limite avec les vecteurs labellisĂ©s.
Important : quand on assigne une valeur Ă un facteur, on doit transmettre le texte correspondant Ă la
modalité, alors que pour un vecteur labellisé on transmettra le code sous-jacent (pour rappel, les
Ă©tiquettes de valeur ne sont quâune information additionnelle).
De plus, nous avons vu que les donnĂ©es initiales nâĂ©taient pas modifiĂ©es par lâajout ou la suppression
dâĂ©tiquettes de valeur, alors que pour les facteurs ce nâest pas vrai. Pour mieux comprendre, essayons la
commande suivante :
R> unclass(factor(v))
[1] 1 1 2 1 2
attr(,"levels")
â 135 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Un facteur stocke de maniĂšre interne les valeurs sous la forme dâune suite dâentiers, dĂ©marrant toujours
par 1, forcĂ©ment consĂ©cutifs, et dont les valeurs dĂ©pendent de lâordre des facteurs. Pour sâen rendre
compte :
[1] 2 2 1 2 1
attr(,"levels")
[1] "h" "f"
[1] 1 1 2 1 2
attr(,"levels")
[1] "f" "h"
Ce qui importe pour un facteur ce sont les modalités de ce dernier tandis que pour un vecteur labellisé ce
sont les valeurs du vecteur elles-mĂȘmes. Cela reste vrai pour lâĂ©criture de conditions.
R> describe(d$sexe)
[2000 obs.]
nominal factor: "Homme" "Femme" "Homme" "Homme" "Femme" "Femme" "Femme" "Homme"
"Femme" "Homme" ...
2 levels: Homme | Femme
NAs: 0 (0%)
n %
Homme 900 45
Femme 1100 55
Total 2000 100
FALSE TRUE
â 136 â
Facteurs et vecteurs labellisés
1100 900
R> table(d$sexe == 1)
FALSE
2000
La condition valide est celle utilisant "Homme" qui est la valeur de la modalité du facteur.
R> describe(femmes$milieu)
n %
[1] urbain 912 45.6
[2] rural 1088 54.4
Total 2000 100.0
R> table(femmes$milieu == 1)
FALSE TRUE
1088 912
Ici, pour ĂȘtre valide, la condition doit porter sur les valeurs de la variable elle-mĂȘme et non sur les
étiquette.
â 137 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Lâimport de donnĂ©es labellisĂ©es, page 149 et le recodage de variables, page 208 (dont la conversion dâun
vecteur labellisé en facteur) seront quant à eux abordés dans les prochains chapitres.
â 138 â
Organiser ses fichiers
Le répertoire de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Les projets dans RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Créer un nouveau projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Fonctionnement par défaut des projets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Options des projets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Naviguer dâun projet Ă un autre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Voir aussi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Appeler un script depuis un autre script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
WEBIN-R
Ce chapitre est évoqué dans le webin-R #02 (les bases du langage R) sur YouTube.
Ce chapitre est évoqué dans le webin-R #03 (statistiques descriptives avec gtsummary et esquisse)
sur YouTube.
Le répertoire de travail
Ă chaque fois que lâon demandera Ă R de charger ou dâenregistrer un fichier (en particulier lorsque lâon
cherchera Ă importer des donnĂ©es, voir le chapitre dĂ©diĂ©, page 149), R Ă©valuera le nom du fichier quâon
lui a transmis par rapport au répertoire de travail actuellement défini, qui correspond au répertoire dans
lequel R est actuellement en train de sâexĂ©cuter.
R> getwd()
Lorsque lâon travaille sous RStudio, le rĂ©pertoire de travail est Ă©galement affichĂ© dans le quadrant
infĂ©rieur droit, en gris, Ă la droite du mot Console (voir la capture dâĂ©cran ci-aprĂšs).
â 139 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Le symbole ~ correspond dans ce cas-lĂ au rĂ©pertoire utilisateur systĂšme, dont lâemplacement dĂ©pend du
systĂšme dâexploitation. Sous Windows, il sâagit du rĂ©pertoire Mes documents ou Documents (le nom varie
suivant la version de Windows).
Le rĂ©pertoire de travail peut ĂȘtre modifiĂ© avec la fonction setwd ou, sous RStudio, via le menu Session >
Set Working Directory. Cependant, nous allons voir que nous nâaurons en pratique presque jamais besoin de
le faire si lâon travaille avec RStudio.
LâidĂ©e principale est de rĂ©unir tous les fichiers / documents relatifs Ă un mĂȘme projet (que ce soit les
donnĂ©es, les scripts, les rapports automatisĂ©sâŠ) dans un rĂ©pertoire dĂ©diĂ©1.
Le menu Projects est accessible via une icĂŽne dĂ©diĂ©e situĂ©e tout en haut Ă droite (voir la capture dâĂ©cran
ci-aprĂšs).
â 140 â
Organiser ses fichiers
â 141 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Si vous débutez avec R, laissez de cÎté pour le moment les gestionnaires de versions qui sont destinés aux
utilisateurs avancĂ©s. Dans le cadre dâun usage courant, on aura recours Ă New Directory.
RStudio nous demande alors le type de projet que lâon souhaite crĂ©er : (i) un projet vide, (ii) une extension
R ou (iii) une application Shiny.
â 142 â
Organiser ses fichiers
Il est encore un peu tÎt pour se lancer dans la création de sa propre extension pour R (voir le chapitre
Développer un package). Les applications Shiny (voir le chapitre dédié) sont des applications webs
interactives. LĂ encore, on attendra une meilleure maĂźtrise de R pour se lancer dans ce type de projets.
Dans un contexte dâanalyse dâenquĂȘtes, on choisira dĂšs lors Empty project.
â 143 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
En premier lieu, on indiquera le nom de notre projet, qui sera également le nom du répertoire qui sera créé
pour stocker les donnĂ©es du projet. Puis, on indiquera le rĂ©pertoire parent, câest-Ă -dire le rĂ©pertoire dans
lequel le répertoire de notre projet sera créé.
Les deux options suivantes concernent que les utilisateurs avancĂ©s. RStudio nous demande sâil on veut
activer Git sur ce projet (Git Ă©tant un gestionnaire de versions, lâoption nâĂ©tant affichĂ©e que si Git est
installĂ© sur votre PC) et sâil on souhaite utiliser lâextension packrat sur ce projet. packrat permet une
gestion des extensions utilisĂ©es, projet par projet, ce qui nâest vraiment utile que dans le cadre dâanalyses
bien spécifiques.
â 144 â
Organiser ses fichiers
Autrement dit, lorsque lâon ouvre un projet RStudio, on revient Ă lâĂ©tat de notre projet tel quâil Ă©tait la
derniĂšre fois que lâon a travaillĂ© dessus. Pratique, non ?
Petite prĂ©cision toutefois, les extensions que lâon avait chargĂ©es en mĂ©moire avec la fonction library
ne sont pas systématiquement rechargées en mémoire. Il faudra donc les appeler à nouveau lors de notre
séance de travail.
âą Ă lâouverture du projet, doit-on charger en mĂ©moire les objets sauvegardĂ©s lors dâune
précédente séance de travail ?
⹠à la fermeture du projet, doit-son sauvegarder (dans le fichier .Rdata ) les différents objets
en mĂ©moire ? Si lâon choisit lâoption Ask, alors une fenĂȘtre vous demandera sâil faut faire cette
sauvegarde chaque fois que vous fermerez le projet.
âą Ă la fermeture du projet, faut-il sauver lâhistorique des commandes ?
Votre projet nâapparait pas dans la liste ? Pas de panique. Il suffit de sĂ©lectionner Open project puis de
parcourir vos répertoires pour indiquer à RStudio le projet à ouvrir.
Vous pouvez noter au passage une option Open project in new window qui permet dâouvrir un projet dans
une nouvelle fenĂȘtre. En effet, il est tout Ă fait possible dâavoir plusieurs projets ouverts en mĂȘme temps.
â 145 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Dans ce cas là , chaque projet aura sa propre session R. Les objets chargés en mémoire pour le projet A ne
seront pas accessibles dans le cadre du projet B et inversement.
Voir aussi
On pourra se référer à la documentation officielle de RStudio : [Link]
articles/200526207-Using-Projects.
Il est possible dâappeler un script au sein dâun autre script Ă lâaide de la fonction source Ă laquelle on
précisera le nom de fichier du script en question.
Supposons par exemple que lâon ait prĂ©parĂ© un script preparation.R chargĂ© dâimporter les donnĂ©es et
de les mettre en forme. Au debut de notre script analyses.R , on pourra indiquer :
R> source("preparation.R")
Ici, on a indiqué à source le fichier preparation.R sans mention de répertoire. DÚs lors, R va aller
chercher ce fichier dans le rĂ©pertoire de travail. Sur un gros projet, on peut ĂȘtre amenĂ© Ă organiser ses
fichiers en plusieurs sous-répertoires pour une meilleure lisibilité. DÚs lors, il faudra indiquer le chemin
relatif pour accĂ©der Ă un fichier, câest-Ă -dire le chemin Ă partir du rĂ©pertoire de travail. Supposons que
notre fichier preparation.R est enregistré dans un sous-répertoire import . Dans ce cas-là , on
appelera notre fichier ainsi :
â 146 â
Organiser ses fichiers
R> source("import/preparation.R")
NOTE
On remarquera quâon a utilisĂ© une barre oblique ou slash ( / ) entre le nom du rĂ©pertoire et le nom
du fichier, ce qui est lâusage courant sous Linux et Mac OS X, tandis que sous Windows on utilise
dâordinaire une barre oblique inversĂ©e ou antislash ( \ ). Sous R, on utilisera toujours la barre oblique
simple ( / ), R sachant « retrouver ses petits » selon le systĂšme dâexploitation.
Par ailleurs, lâautocomplĂ©tion de RStudio fonctionne aussi pour les noms de fichiers. Essayez par
exemple dâappuyer sur la touche Tab aprĂšs avoir taper les premiĂšres lettres du nom de votre fichier.
â 147 â
Import de données
Importer des fichiers texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Structure dâun fichier texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Interface graphique avec RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Dans un script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Importer depuis des logiciels de statistique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
SPSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
SAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Stata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
dBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Feuille de calcul Google Sheets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Données spatiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Shapefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Rasters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Connexion à des bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Interfaçage via lâextension DBI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Utilisation de dplyr et dbplyr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Autres sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Sauver ses données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
GUIDE-R
Une version actualisée de ce chapitre est disponible sur guide-R : Import & Export de données
â 149 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
I M P O R TA N T
Importer des donnĂ©es est souvent lâune des premiĂšre opĂ©rations que lâon effectue lorsque lâon dĂ©bute
sous R, et ce nâest pas la moins compliquĂ©e. En cas de problĂšme il ne faut donc pas hĂ©siter Ă demander
de lâaide par les diffĂ©rents moyens disponibles (voir le chapitre OĂč trouver de lâaide ?, page 167) avant
de se décourager.
Avant toute chose, il est impératif de bien organiser ses différents fichiers (voir le chapitre dédié,
page 139). Concernant les donnĂ©es sources que lâon utilisera pour ses analyses, je vous recommande
de les placer dans un sous-répertoire dédié de votre projet.
Lorsque lâon importe des donnĂ©es, il est Ă©galement impĂ©ratif de vĂ©rifier que lâimport sâest
correctement déroulé (voir la section Inspecter les données, page 41 du chapitre Premier travail avec
les données).
Cependant, il existe une grande variétés de format texte, qui peuvent prendre différents noms selon les
outils, tels que texte tabulé ou texte (séparateur : tabulation), CSV (pour comma-separated value, sachant que
suivant les logiciels le sĂ©parateur peut ĂȘtre une virgule ou un point-virgule).
â 150 â
Import de données
Il ne faut pas hésitez à ouvrir le fichier avec un éditeur de texte pour le regarder de plus prÚs.
Lâinterface de RStudio vous prĂ©sente sous Import Options les diffĂ©rentes options dâimport disponible. La
section Data Preview vous permet de voir en temps réel comment les données sont importées. La section
Code Preview vous indique le code R correspondant Ă vos choix. Il nây a plus quâĂ le copier/coller dans un de
vos scripts ou Ă cliquer sur Import pour lâexĂ©cuter.
Vous pourrez remarquer que RStudio fait appel Ă lâextension readr du tidyverse pour lâimport des donnĂ©es
via la fonction read_csv .
1. Lâoption CSV fonctionne pour tous les fichiers de type texte, mĂȘme si votre fichier a une autre extension, .txt par
exemple
â 151 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
readr essaie de deviner le type de chacune des colonnes, en se basant sur les premiĂšres observations.
En cliquant sur le nom dâune colonne, il est possible de modifier le type de la variable importĂ©e. Il est
Ă©galement possible dâexclure une colonne de lâimport (skip).
Dans un script
Lâinterface graphique de RStudio fournit le code dâimport. On peut Ă©galement lâadapter Ă ces besoins en
consultant la page dâaide de read_csv pour plus de dĂ©tails. Par exemple :
R> library(readr)
d <- read_delim("[Link]
[Link]",
delim = "\t", quote = "'"
)
Rows: 7 Columns: 4
ââ Column specification ââââââââââââââââââââââââââââââââââââ
Delimiter: "\t"
chr (2): Sexe, Etudes
dbl (1): Age
num (1): Taille
âč Use `spec()` to retrieve the full column specification for this data.
âč Specify the column types or set `show_col_types = FALSE` to quiet this message.
Le premier Ă©lĂ©ment peut ĂȘtre un lien internet ou bien le chemin local vers un fichier. Afin dâorganiser au
mieux vos fichiers, voir le chapitre Organiser ses fichiers, page 139.
NOTE
Certains caractĂšres sont parfois prĂ©cĂ©dĂ©s dâune barre oblique inversĂ©e ou antislash ( \ ). Cela
correspond à des caractÚres spéciaux. En effet, " est utilisé pour délimiter dans le code le début et
la fin dâune chaĂźne de caractĂšres. Comment indiquer Ă R le caractĂšre " proprement dit. Et bien avec
\" . De mĂȘme, \t sera interprĂ©tĂ© comme une tabulation et non comme la lettre t .
R> class(d)
â 152 â
Import de données
R> d
Lâobjet renvoyĂ© est un tableau de donnĂ©es ou [Link]. Plus prĂ©cisĂ©ment, il sâagit dâun tibble, câest-Ă -
dire un tableau de données légÚrement amélioré facilement utilisable avec les différentes extensions du
tidyverse. Pas de panique, câest un tableau de donnĂ©es comme les autres. Disons quâil est possible de faire
un peu plus de choses avec. Pour cela, voir le chapitre dédié à dplyr, page 241.
readr propose plusieurs fonctions proches : read_delim , read_csv , read_csv2 et read_tsv . Elles
fonctionnent toutes de maniĂšre identique et ont les mĂȘmes arguments. Seule diffĂ©rence, les valeurs par
défaut de certainsparamÚtres.
NOTE
Dans des manuels ou des exemples en ligne, vous trouverez parfois mention des fonctions
[Link] , [Link] , read.csv2 , [Link] ou encore read.delim2 . Il sâagit des
fonctions natives et historiques de R (extension utils) dĂ©diĂ©es Ă lâimport de fichiers textes. Elles sont
similaires Ă celles de readr dans lâidĂ©e gĂ©nĂ©rale mais diffĂšrent dans leurs dĂ©tails et les traitements
effectuĂ©s sur les donnĂ©es (pas de dĂ©tection des dates par exemple). Pour plus dâinformation, vous
pouvez vous rĂ©fĂ©rer Ă la page dâaide de ces fonctions.
Lâextension haven (qui fait partie du âtidyverseâ) tente de remĂ©dier Ă plusieurs des limitations rencontrĂ©es
avec foreign :
⹠le format des métadonnées importé est uniforme, quel que soit le type de fichier source (SAS,
SPSS ou Stata) ;
âą les variables labellisĂ©es ne sont pas transformĂ©es en facteurs, mais hĂ©ritent dâune nouvelle
classe haven_labelled , la valeur initiale restant inchangée ;
⹠les différents formats de date sont convertis dans des classes R appropriées, utilisables en
particulier avec lubridate ;
â 153 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
âą haven peut lire les fichiers SAS natifs (extension .sas7bdat ) ce que ne peut pas faire foreign ;
âą haven peut lire les fichiers Stata 13 et 14, alors que foreign ne sait lire ces fichiers que jusquâĂ la
version 12 ;
âą les tableaux de donnĂ©es produits ont directement la classe tbl_df ce qui permets dâutiliser
directement les fonctionnalitĂ©s de lâextension dplyr.
Ă noter, il est Ă©galement possible dâutiliser lâinterface graphique de RStudio pour lâimport des fichiers
SPSS, Stata, SAS et Excel.
I M P O R TA N T
Données labellisées
à la différence de foreign, haven ne convertit pas les variables avec des étiquettes de valeurs en
facteurs mais en vecteurs labellisés du type haven_labelled qui sont présentés en détail dans le
chapitre Facteurs et vecteurs labellisés, page 127 et dans le chapitre recodage de variables, page 208
oĂč est discutĂ©e la question de savoir Ă quel moment convertir les donnĂ©es labellisĂ©es.
SPSS
Les fichiers générés par SPSS sont de deux types : les fichiers SPSS natifs natifs (extension .sav ) et les
fichiers au format SPSS export (extension .por ).
â 154 â
Import de données
R> library(haven)
donnees <- read_spss("data/[Link]", user_na = TRUE)
I M P O R TA N T
Dans SPSS, il est possible de définir des valeurs à considérées comme manquantes. Plus précisément
jusquâĂ 3 valeurs spĂ©cfiques et/ou les valeurs comprises entre un minimum et un maximum. Par
dĂ©faut, read_spss convertir toutes ces valeurs en NA lors de lâimport.
Or, il est parfois important de garder les différentes valeurs originelles, notamment dans le cadre
de lâanalyse de donnĂ©es dâenquĂȘte, un manquant du type «ne sait pas» nâĂ©tant pas Ă©quivalent Ă un
manquant du type «refus» ou du type «variable non collectée».
DĂšs lors, nous vous recommandons dâappeler read_spss avec lâoption user_na = TRUE . Dans ce
cas-là , les valeurs manquantes définies dans SPSS ne seront pas converties en NA , tout en conservant
la définition des valeurs définies comme manquantes. Il sera alors toujours possible de convertir,
dans un second temps et en fonction des besoins, ces valeurs à considérer comme manquantes en
NA grace aux fonctions de lâextension labelled , en particulier user_na_to_na , na_values et
na_range .
Ă noter que les fonctions describe et freq de lâextension questionr que nous arboderons dans
dâautres chapitres savent exploiter ces valeurs Ă considĂ©rer comme manquantes.
â 155 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
NOTE
Si vous prĂ©fĂ©rez utiliser lâextension foreign, la fonction correspondante est [Link] . On indiquera
Ă la fonction de renvoyer un tableau de donnĂ©es avec lâargument [Link] = TRUE .
Par défaut, les variables numériques pour lesquelles des étiquettes de valeurs ont été définies sont
transformées en variables de type facteur, les étiquettes définies dans SPSS étant utilisées comme
labels du facteur. De mĂȘme, si des valeurs manquantes ont Ă©tĂ© dĂ©finies dans SPSS, ces derniĂšres seront
toutes transformées en NA (R ne permettant pas de gérer plusieurs types de valeurs manquantes). Ce
comportement peut ĂȘtre modifiĂ© avec [Link] et [Link] .
R> library(foreign)
donnees <- [Link]("data/[Link]", [Link] = TRUE, [Link]
bels = FALSE, [Link] = FALSE)
Il est important de noter que [Link] de lâextension foreign ne sait pas importer les dates. Ces
derniÚres sont donc automatiquement transformées en valeurs numériques.
SPSS stocke les dates sous la forme du nombre de secondes depuis le dĂ©but du calendrier grĂ©gorien, Ă
savoir le 14 octobre 1582. DĂšs lors, si lâon des dates dans un fichier SPSS et que ces derniĂšres ont Ă©tĂ©
converties en valeurs numériques, on pourra essayer la commande suivante :
SAS
Les fichiers SAS se présentent en général sous deux format : format SAS export (extension .xport ou
.xpt ) ou format SAS natif (extension .sas7bdat ).
Les fichiers SAS natifs peuvent ĂȘtre importĂ©es directement avec read_sas de lâextension haven :
R> library(haven)
donnees <- read_sas("data/fichier.sas7bdat")
Au besoin, on pourra prĂ©ciser en deuxiĂšme argument le nom dâun fichier SAS catalogue (extension
.sas7bcat ) contenant les métadonnées du fichier de données.
â 156 â
Import de données
R> library(haven)
donnees <- read_sas("data/fichier.sas7bdat", "data/fichier.sas7bcat")
Les fichiers au format SAS export peuvent ĂȘtre importĂ©s via la fonction [Link] de lâextension
foreign. Celle-ci sâutilise trĂšs simplement, en lui passant le nom du fichier en argument :
R> library(foreign)
donnees <- [Link]("data/[Link]")
Stata
Pour les fichiers Stata (extension .dta ), on aura recours aux fonctions read_dta et read_stata de
lâextension haven. Ces deux fonctions sont identiques.
R> library(haven)
donnees <- read_dta("data/[Link]")
I M P O R TA N T
Dans Stata, il est possible de définir plusieurs types de valeurs manquantes, qui sont notées sous
la forme .a Ă .z . Pour conserver cette information lors de lâimport, haven a introduit dans R
le concept de tagged NA ou tagged missing value. Plus de détails sur ces données manquantes
«étiquettĂ©es», on se rĂ©fĂ©rera Ă la page dâaide de la fonction tagged_na .
â 157 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
NOTE
Lâoption [Link] indique si les variables labellisĂ©es doit ĂȘtre converties automatiquement
en facteurs. Pour un résultat similaire à celui de haven, on choisira donc :
R> library(foreign)
donnees <- [Link]("data/[Link]", [Link] = FALSE)
Lâoption [Link] permet de convertir les dates du format Stata dans un format de dates gĂ©rĂ©
par R. Cependant, cela ne marche pas toujours. Dans ces cas lĂ , lâopĂ©ration suivante peut fonctionner.
Sans garantie néanmoins, il est toujours vivement conseillé de vérifier le résultat obtenu !
Excel
Une premiÚre approche pour importer des données Excel dans R consiste à les exporter depuis Excel dans
un fichier texte (texte tabulĂ© ou CSV) puis de suivre la procĂ©dure dâimportation dâun fichier texte.
Une feuille Excel peut Ă©galement ĂȘtre importĂ©e directement avec lâextension readxl qui appartient Ă la
mĂȘme famille que haven et readr.
La fonction read_excel permet dâimporter Ă la fois des fichiers .xls (Excel 2003 et prĂ©cĂ©dents) et
.xlsx (Excel 2007 et suivants).
R> library(readxl)
donnees <- read_excel("data/[Link]")
Une seule feuille de calculs peut ĂȘtre importĂ©e Ă la fois. On pourra prĂ©ciser la feuille dĂ©sirĂ©e avec sheet
en indiquant soit le nom de la feuille, soit sa position (premiĂšre, seconde, âŠ).
On pourra préciser avec col_names si la premiÚre ligne contient le nom des variables.
Par défaut, read_excel va essayer de deviner le type (numérique, textuelle, date) de chaque colonne. Au
besoin, on pourra indiquer le type souhaité de chaque colonne avec col_types .
â 158 â
Import de données
RStudio propose Ă©galement pour les fichiers Excel un assitant dâimportation, similaire Ă celui pour les
fichiers texte, permettant de faciliter lâimport.
NOTE
Une seconde alternative est lâextension xlsx qui propose deux fonctions diffĂ©rentes pour importer
des fichiers Excel : [Link] et read.xlsx2 . La finalitĂ© est la mĂȘme mais leur fonctionnement
interne est diffĂ©rent. En cas de difficultĂ©s dâimport, on pourra tester lâautre. Il est impĂ©ratif de spĂ©cifier
la position de la feuille de calculs que lâon souhaite importer.
R> library(xlsx)
donnees <- [Link]("data/[Link]", 1)
dBase
LâInsee et dâautres producteur de donnĂ©es diffusent leurs fichiers au format dBase (extension .dbf ).
Ceux-ci sont directement lisibles dans R avec la fonction [Link] de lâextension foreign.
R> library(foreign)
donnees <- [Link]("data/[Link]")
La principale limitation des fichiers dBase est de ne pas gérer plus de 256 colonnes. Les tables des
enquĂȘtes de lâInsee sont donc parfois dĂ©coupĂ©es en plusieurs fichiers .dbf quâil convient de fusionner
avec la fonction merge . Lâutilisation de cette fonction est dĂ©taillĂ©e dans le chapitre sur la fusion de tables,
page 277.
â 159 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Données spatiales
Shapefile
Les fichiers Shapefile sont couramment utilisés pour échanger des données géoréférencées. La majorité
des logiciels de SIG (systĂšmes dâinformations gĂ©ographiques) sont en capacitĂ© dâimporter et dâexporter
des données dans ce format.
Un shapefile contient toute lâinformation liĂ©e Ă la gĂ©omĂ©trie des objets dĂ©crits, qui peuvent ĂȘtre :
âą des points
âą des lignes
âą des polygones
Son extension est classiquement .shp et il est toujours accompagnĂ© de deux autres fichiers de mĂȘme
nom et dâextensions :
⹠un fichier .dbf , qui contient les données attributaires relatives aux objets contenus dans le
shapefile
âą un fichier .shx , qui stocke lâindex de la gĂ©omĂ©trie
En premier lieu, il importe que tous les fichiers qui compose un mĂȘme shapefile soit situĂ©s dans le mĂȘme
rĂ©pertoire et aient le mĂȘme nom (seule lâextension Ă©tant diffĂ©rente).
Lâextension maptools fournit les fonctions permettant dâimporter un shapefile dans R. Le rĂ©sultat obtenu
utilisera lâune des diffĂ©rentes classes spatiales fournies par lâextension sp.
â 160 â
Import de données
R> library(maptools)
donnees_spatiales <- readShapeSpatial("data/[Link]")
Si lâon connait dĂ©jĂ le type de donnĂ©es du shapefile (points, lignes ou polygones), on pourra utiliser
directement readShapePoints , readShapeLines ou readShapePoly .
Rasters
Il existe de multiples formats pour stocker des donnĂ©es matricielles spatiales. Lâun des plus communs est
le format ASCII grid aussi connu sous le nom de Arc/Info ASCII grid ou ESRI grid. Lâextension de ce format
nâest pas toujours uniforme. On trouve parfois .asc ou encore .ag voir mĂȘme .txt .
Pour importer ce type de fichier, on pourra avoir recours Ă la fonction readAsciiGrid de lâextension
maptools. Le rĂ©sultat sera, par dĂ©faut, au format SpatialGridDataFrame de lâextension sp.
R> library(maptools)
donnees_spatiales <- readAsciiGrid("data/[Link]")
Lâextension raster permet dâeffectuer de multiples manipulations sur les donnĂ©es du type raster. Elle
est en capacitĂ© dâimporter des donnĂ©es depuis diffĂ©rents formats (plus prĂ©cisĂ©ment les formats pris en
charge par la librairie GDAL, [Link]
De plus, les fichiers raster pouvant ĂȘtre particuliĂšrement volumineux (jusquâĂ plusieurs Go de donnĂ©es),
lâextension raster est capable de travailler sur un fichier raster sans avoir Ă le charger intĂ©gralement en
mémoire.
Pour illustrer rapidement lâutilisation de bases de donnĂ©es, on va crĂ©er une base SQLite dâexemple Ă lâaide
du code R suivant, qui copie la table du jeu de données mtcars dans une base de données [Link] :
[1] TRUE
â 161 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> library(DBI)
library(RSQLite)
con <- DBI::dbConnect(RSQLite::SQLite(), dbname = "[Link]")
data(mtcars)
mtcars$name <- rownames(mtcars)
dbWriteTable(con, "mtcars", mtcars)
dbDisconnect(con)
Si on souhaite se connecter Ă cette base de donnĂ©es par la suite, on peut utiliser lâextension DBI, qui
propose une interface générique entre **R// et différents systÚmes de bases de données. On doit aussi
avoir installĂ© et chargĂ© lâextension spĂ©cifique Ă notre base, ici RSQLite. On commence par ouvrir une
connexion Ă lâaide de la fonction dbConnect de DBI :
R> library(DBI)
library(RSQLite)
con <- DBI::dbConnect(RSQLite::SQLite(), dbname = "[Link]")
La connexion est stockĂ©e dans un objet con , quâon va utiliser Ă chaque fois quâon voudra interroger la
base.
On peut vérifier la liste des tables présentes et les champs de ces tables avec dbListTables et
dbListFields :
R> dbListTables(con)
[1] "mtcars"
On peut Ă©galement lire le contenu dâune table dans un objet de notre environnement avec
dbReadTable :
On peut Ă©galement envoyer une requĂȘte SQL directement Ă la base et rĂ©cupĂ©rer le rĂ©sultat avec
dbGetQuery :
â 162 â
Import de données
R> dbDisconnect(con)
Ceci nâest Ă©videmment quâun tout petit aperçu des fonctionnalitĂ©s de DBI.
R> library(DBI)
library(RSQLite)
library(dplyr)
con <- DBI::dbConnect(RSQLite::SQLite(), dbname = "[Link]")
La fonction tbl notamment permet de créer un nouvel objet qui représente une table de la base de
données :
I M P O R TA N T
Ici lâobjet cars_tbl nâest pas un tableau de donnĂ©es, câest juste un objet permettant dâinterroger la
table de notre base de données.
On peut utiliser cet objet avec les verbes, page 241 de dplyr :
dbplyr sâoccupe, de maniĂšre transparente, de transformer les instructions dplyr en requĂȘte SQL,
dâinterroger la base de donnĂ©es et de renvoyer le rĂ©sultat. De plus, tout est fait pour quâun minimum
dâopĂ©rations sur la base, parfois coĂ»teuses en temps de calcul, ne soient effectuĂ©es.
â 163 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
I M P O R TA N T
Il est possible de modifier des objets de type tbl , par exemple avec mutate :
Dans ce cas la nouvelle colonne type est bien créée et on peut y accéder par la suite. Mais cette
crĂ©ation se fait dans une table temporaire : elle nâexiste que le temps de la connexion Ă la base de
donnĂ©es. Ă la prochaine connexion, cette nouvelle colonne nâapparaĂźtra pas dans la table.
Bien souvent on utilisera une base de donnĂ©es quand les donnĂ©es sont trop volumineuses pour ĂȘtre
gérées par un ordinateur de bureau. Mais si les données ne sont pas trop importantes, il sera toujours plus
rapide de rĂ©cupĂ©rer lâintĂ©gralitĂ© de la table dans notre session R pour pouvoir la manipuler comme les
tableaux de données habituels. Ceci se fait grùce à la fonction collect de dplyr :
Ici, cars est bien un tableau de données classique, copie de la table de la base au moment du collect .
R> dbDisconnect(con)
Ressources
Pour plus dâinformations, voir la documentation trĂšs complĂšte (en anglais) proposĂ©e par RStudio.
Par ailleurs, depuis la version 1.1, RStudio facilite la connexion Ă certaines bases de donnĂ©es grĂące Ă
lâonglet Connections. Pour plus dâinformations on pourra se rĂ©fĂ©rer Ă lâarticle (en anglais) Using RStudio
Connections.
Autres sources
R offre de trĂšs nombreuses autres possibilitĂ©s pour accĂ©der aux donnĂ©es. Il est ainsi possible dâimporter
des donnĂ©es depuis dâautres applications qui nâont pas Ă©tĂ© Ă©voquĂ©es (Epi Info, S-Plus, etc.), de lire des
données via ODBC ou des connexions réseau, etc.
â 164 â
Import de données
La section Database Management du site Awesome R fournit Ă©galement une liste dâextensions permettant
de sâinterfacer avec diffĂ©rents gestionnaires de bases de donnĂ©es.
Par exemple, si lâon souhaite sauvegarder son tableau de donnĂ©es d ainsi que les objets tailles et
poids dans un fichier [Link] :
Ă tout moment, il sera toujours possible de recharger ces donnĂ©es en mĂ©moire Ă lâaide de la fonction
load :
R> load("[Link]")
I M P O R TA N T
Si entre temps vous aviez modifié votre tableau d , vos modifications seront perdues. En effet, si lors
du chargement de donnĂ©es, un objet du mĂȘme nom existe en mĂ©moire, ce dernier sera remplacĂ© par
lâobjet importĂ©.
La fonction [Link] est un raccourci pour sauvergarder tous les objets de la session de travail dans
le fichier .RData (un fichier un peu Ă©trange car il nâa pas de nom mais juste une extension). Lors de la
fermeture de RStudio, il vous sera demandé si vous souhaitez enregistrer votre session. Si vous répondez
Oui, câest cette fonction [Link] qui sera appliquĂ©e.
R> [Link]()
[1] FALSE
â 165 â
OĂč trouver de lâaide ?
Aide en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Aide sur une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Naviguer dans lâaide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Ressources sur le Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Moteur de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Aide en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
AntisĂšches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Ressources officielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Ouvrages, blogs, MOOCs⊠. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Revue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Ressources francophones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
OĂč poser des questions ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Les forums dâanalyse-R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Discussion instantanée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Liste R-soc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Liste Quanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
StackOverflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Forum Web en français . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Canaux IRC (chat) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Listes de discussion officielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
OĂč trouver des extensions intĂ©ressantes ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
NOTE
La version originale de ce chapitre a été écrite par Julien Barnier dans le cadre du support de cours
Introduction Ă R.
â 167 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Aide en ligne
R dispose dâune aide en ligne trĂšs complĂšte, mais dont lâusage nâest pas forcĂ©ment trĂšs simple. Dâune
part car elle est intĂ©gralement en anglais, dâautre part car son organisation prend un certain temps Ă ĂȘtre
maßtrisée.
Pour accĂ©der Ă lâaide de la fonction mean , par exemple, il vous suffit de saisir directement :
R> ?mean
ou bien
R> help("mean")
Sous RStudio, la page dâaide correspondante sâaffichera sous lâonglet Help dans le quadrant infĂ©rieur droit.
â 168 â
OĂč trouver de lâaide ?
Section Contenu
See Also trĂšs utile, renvoie vers dâautres fonctions semblables ou liĂ©es, ce qui peut ĂȘtre trĂšs
utile pour découvrir ou retrouver une fonction dont on a oublié le nom
R> example(mean)
R> [Link]()
Si vous souhaitez rechercher quelque chose dans le contenu de lâaide, vous pouvez utiliser la fonction
[Link] (ou ?? qui est Ă©quivalente) qui renvoie une liste des pages dâaide contenant les termes
recherchés.
Par exemple :
â 169 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> [Link]("logistic")
ou
R> ??logistic
Moteur de recherche
Le fait que le logiciel sâappelle R ne facilite malheureusement pas les recherches sur le Web⊠La solution
Ă ce problĂšme a Ă©tĂ© trouvĂ©e grĂące Ă la constitution dâun moteur de recherche ad hoc Ă partir de Google,
nommé Rseek :
[Link]
Les requĂȘtes saisies dans Rseek sont exĂ©cutĂ©es dans des corpus prĂ©dĂ©finis liĂ©s Ă R, notamment les
documents et manuels, les listes de discussion ou le code source du programme.
Aide en ligne
Les sites RDocumentation et [Link] proposent un accĂšs clair et rapide Ă la documentation de R et des
extensions hébergées sur le CRAN (ainsi que certaines extensions hébergées sur GitHub). Il permettent
notamment de rechercher et naviguer facilement entre les pages des différentes fonctions :
âą [Link]
âą [Link]
AntisĂšches
RStudio propose plusieurs cheat sheets (antisĂšches) en anglais qui proposent sur deux pages une synthĂšse
â 170 â
OĂč trouver de lâaide ?
[Link]
Ressources officielles
La documentation officielle de R est accessible en ligne depuis le site du projet :
[Link]
Les liens de lâentrĂ©e Documentation du menu de gauche vous permettent dâaccĂ©der Ă diffĂ©rentes
ressources.
Manuels
Les manuels sont des documents complets de présentation de certains aspects de R. Ils sont accessibles en
ligne, ou téléchargeables au format PDF :
[Link]
On notera plus particuliÚrement An introduction to R, normalement destiné aux débutants, mais qui
nĂ©cessite quand mĂȘme un minimum dâaisance en informatique et en statistiques :
[Link]
R Data Import/Export explique notamment comment importer des donnĂ©es depuis dâautres logiciels :
[Link]
Francophones
Parmi les ressources en français, on peut citer notamment R et espace, manuel dâinitiation Ă la
programmation avec R appliquĂ© Ă lâanalyse de lâinformation gĂ©ographique, librement tĂ©lĂ©chargeable en
ligne.
â 171 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
La section Contributed documentation du site officiel de R contient également des liens vers différents
documents en français, plus ou moins accessibles et plus ou moins récemment mis à jour.
Le pĂŽle bioinformatique lyonnais (PBIL) propose depuis longtemps une somme trĂšs importante de
documents, qui comprend des cours complets de statistiques utilisant R :
âą [Link]
âą ElementR, le blog du groupe du mĂȘme nom, qui propose de nombreuses ressources sur R en
gĂ©nĂ©ral et en particulier sur la cartographie ou lâanalyse de rĂ©seaux.
⹠R-atique, blog animé par Lise Vaudor, propose réguliÚrement des articles intéressants et
accessibles sur des mĂ©thodes dâanalyse ou sur des extensions R.
Enfin, le site France Université Numérique propose réguliÚrement des sessions de cours en ligne, parmi
lesquels une Introduction Ă la statistique avec R et un cours sur lâAnalyse des donnĂ©es
multidimensionnelles.
Anglophones
On citera essentiellement lâouvrage en ligne R for data science, trĂšs complet, et qui fournit une
introduction trÚs complÚte et progressive à R, et aux packages du tidyverse. Il existe également en version
papier.
Pour aborder des aspects beaucoup plus avancĂ©s, lâouvrage Ă©galement en ligne Advanced R, dâHadley
Wickham, est extrĂȘmement bien et fait et trĂšs complet.
Lâouvrage en ligne The Epidemiologist R Handbook: R for applied epidemiology and public health est trĂšs
complet et pourra Ă©galement ĂȘtre utile Ă des chercheur·e·s dâautres disciplines.
On notera Ă©galement lâexistence du R journal, revue en ligne consacrĂ©e Ă R, et qui propose rĂ©guliĂšrement
â 172 â
OĂč trouver de lâaide ?
des articles sur des mĂ©thodes dâanalyse, des extensions, et lâactualitĂ© du langage.
La plateforme R-bloggers agrĂšge les contenus de plusieurs centaines de blogs parlant de R, trĂšs pratique
pour suivre lâactualitĂ© de la communautĂ©.
Enfin, sur Twitter, les échanges autour de R sont regroupés autour du hashtag #rstats.
On peut aussi citer le site Awesome R ([Link] qui fournit une liste
dâextensions choisies et triĂ©es par thĂ©matique et le site R Data Science Tutorials qui recense des tutoriels
en anglais.
FAQ
Les FAQ (frequently asked questions) regroupent des questions frĂ©quemment posĂ©es et leurs rĂ©ponses. Ă
lire donc ou, au moins, Ă parcourir avant toute chose :
[Link]
Mais il existe également une FAQ dédiée aux questions liées à Windows et une autre à la plateforme Mac
OS X.
NOTE
Les manuels et les FAQ sont accessibles mĂȘme si vous nâavez pas dâaccĂšs Ă Internet en utilisant la
fonction [Link] décrite précédemment.
R-announce
R-announce est la liste de diffusion Ă©lectronique officielle du projet. Elle ne comporte quâun nombre
réduit de messages (quelques-uns par mois tout au plus) et diffuse les annonces concernant de nouvelles
versions de R ou dâautres informations particuliĂšrement importantes. On peut sây abonner Ă lâadresse
suivante :
[Link]
R Journal
R Journal est la « revue » officielle du projet R, qui a succédé début 2009 à la lettre de nouvelles R News.
Elle paraĂźt entre deux et cinq fois par an et contient des informations sur les nouvelles versions du logiciel,
des articles prĂ©sentant des extensions, des exemples dâanalyse⊠Les parutions sont annoncĂ©es sur la liste
de diffusion R-announce et les numĂ©ros sont tĂ©lĂ©chargeables Ă lâadresse suivante :
â 173 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
[Link]
Autres documents
On trouvera de nombreux documents dans différentes langues, en général au format PDF, dans le
répertoire suivant :
[Link]
Parmi ceux-ci, les cartes de rĂ©fĂ©rence peuvent ĂȘtre trĂšs utiles, ce sont des aides-mĂ©moire recensant les
fonctions les plus courantes :
[Link]
On notera Ă©galement un document dâintroduction en anglais progressif et sâappuyant sur des mĂ©thodes
statistiques relativement simples :
[Link]
Pour les utilisateurs déjà habitués à SAS ou SPSS, le livre R for SAS and SPSS Users et le document gratuit
qui en est tirĂ© peuvent ĂȘtre de bonnes ressources, tout comme le site web Quick-R :
[Link] et [Link]
Revue
La revue Journal of Statistical Software est une revue électronique anglophone, dont les articles sont en
accĂšs libre, et qui traite de lâutilisation de logiciels dâanalyse de donnĂ©es dans un grand nombre de
domaines. De nombreux articles (la majoritĂ©) sont consacrĂ©s Ă R et Ă la prĂ©sentation dâextensions plus ou
moins spécialisées.
Les articles qui y sont publiés prennent souvent la forme de tutoriels plus ou moins accessibles mais qui
fournissent souvent une bonne introduction et une ressource riche en informations et en liens.
Adresse de la revue :
[Link]
Ressources francophones
Il existe des ressources en français sur lâutilisation de R, mais peu sont rĂ©ellement destinĂ©es aux
débutants, elles nécessitent en général des bases à la fois en informatique et en statistique.
Le document le plus abordable et le plus complet est sans doute R pour les dĂ©butants, dâEmmanuel Paradis,
accessible au format PDF :
[Link]
La somme de documentation en français la plus importante liĂ©e Ă R est sans nulle doute celle mise Ă
â 174 â
OĂč trouver de lâaide ?
disposition par le PĂŽle bioinformatique lyonnais. Leur site propose des cours complets de statistique
utilisant R :
[Link]
La plupart des documents sont assez pointus niveau mathématique et plutÎt orientés biostatistique, mais
on trouvera des documents plus introductifs ici :
[Link]
Dans tous les cas la somme de travail et de connaissances mise Ă disposition librement est
impressionnante⊠Enfin, le site de Vincent Zoonekynd ([Link]
[Link]) comprend de nombreuses notes prises au cours de sa découverte du logiciel. On notera
cependant que lâauteur est normalien et docteur en mathĂ©matiquesâŠ
RStudio
La documentation officielle de RStudio est disponible sur [Link] (catégorie
Documentation disponible en milieu de page).
Discussion instantanée
Grrr (âpour quand votre R fait Grrrâ) est un groupe Slack (plateforme de discussion instantanĂ©e)
francophone dĂ©diĂ© aux Ă©changes et Ă lâentraide autour de R. Il est ouvert Ă tous et se veut accessible aux
dĂ©butants. Vous pouvez mĂȘme utiliser un pseudonyme si vous prĂ©fĂ©rez.
â 175 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
[Link]
Liste R-soc
Une liste de discussion a Ă©tĂ© créée spĂ©cialement pour permettre aide et Ă©changes autour de lâutilisation
de R en sciences sociales. Elle est hĂ©bergĂ©e par RENATER et on peut sây abonner Ă lâadresse suivante :
[Link]
GrĂące aux services offerts par le site [Link], la liste est Ă©galement disponible sous dâautres formes
(forum Web, blog, NNTP, flux RSS) permettant de lire et de poster sans avoir Ă sâinscrire et Ă recevoir les
messages sous forme de courrier Ă©lectronique. Pour plus dâinformations :
[Link]
Liste Quanti
La liste Quanti Ă©galement hĂ©bergĂ©e par Renater a pour vocation dâaccueillir les contributions et les
Ă©changes de toutes celles et tous ceux qui sâintĂ©ressent aux questions dâenseignement des mĂ©thodes
quantitatives dans les sciences sociales. Cela inclue lâusage de R.
StackOverflow
Le site StackOverflow (qui fait partie de la famille des sites StackExchange) comprend une section
(anglophone) dĂ©diĂ©e Ă R qui permet de poser des questions et en gĂ©nĂ©ral dâobtenir des rĂ©ponses assez
rapidement :
[Link]
La premiĂšre chose Ă faire, Ă©videmment, est de vĂ©rifier que sa question nâa pas dĂ©jĂ Ă©tĂ© posĂ©e.
Les questions diverses et variĂ©es peuvent ĂȘtre posĂ©es dans la rubrique Questions en cours :
[Link]
Il est tout de mĂȘme conseillĂ© de faire une recherche rapide sur le forum avant de poser une question, pour
â 176 â
OĂč trouver de lâaide ?
Si vous avez dĂ©jĂ lâhabitude dâutiliser IRC, il vous suffit de pointer votre client prĂ©fĂ©rĂ© sur Freenode
( [Link] ) puis de rejoindre lâun des canaux en question.
Sinon, le plus simple est certainement dâutiliser lâinterface web de Mibbit, accessible Ă lâadresse
[Link]
Dans le champ Connect to IRC, sélectionnez [Link], puis saisissez un pseudonyme dans le champ Nick
et #R dans le champ Channel. Vous pourrez alors discuter directement avec les personnes présentes.
Le canal #R est normalement peuplé de personnes qui seront trÚs heureuses de répondre à toutes les
questions, et en gĂ©nĂ©ral lâambiance y est trĂšs bonne. Une fois votre question posĂ©e, nâhĂ©sitez pas Ă ĂȘtre
patient et Ă attendre quelques minutes, voire quelques heures, le temps quâun des habituĂ©s vienne y faire
un tour.
Pour une consultation ou un envoi ponctuels, le mieux est sans doute dâutiliser les interfaces Web fournies
par [Link] :
[Link]
R-help est une liste avec de nombreux messages, suivie par des spécialistes de R, dont certains des
développeurs principaux. Elle est cependant à réserver aux questions particuliÚrement techniques qui
nâont pas trouvĂ© de rĂ©ponses par dâautres biais.
Dans tous les cas, il est nécessaire avant de poster sur cette liste de bien avoir pris connaissance du posting
guide correspondant :
[Link]
Plusieurs autres listes plus spĂ©cialisĂ©es existent Ă©galement, elles sont listĂ©es Ă lâadresse suivante :
[Link]
â 177 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Si un des meilleurs moyens reste le bouche Ă oreille, on peut aussi se reporter Ă la page CRAN Task
view qui liste un certain nombre de domaines (classification, sciences sociales, sĂ©ries temporellesâŠ) et
indique, pour chacun dâentre eux, une liste dâextensions potentiellement intĂ©ressantes accompagnĂ©es
dâune courte description. On peut mĂȘme installer lâensemble des extensions dâune catĂ©gorie avec la
fonction [Link]() .
Une autre possibilitĂ© est de consulter la page listant lâensemble des packages existant. Sâil nâest
Ă©videmment pas possible de passer en revue les milliers dâextensions une Ă une, on peut toujours effectuer
une recherche dans la page avec des mots-clés correspondant aux fonctionnalités recherchées.
Un autre site intéressant est Awesome R, une liste élaborée collaborativement des extensions les plus
utiles ou les plus populaires classées par grandes catégories : manipulation des données, graphiques
interactifs, etc.
La page frrrenchies liste des packages pouvant ĂȘtre utiles pour des utilisateurs français (gĂ©olocalisation,
traitement du langage, accĂšs Ă des APIâŠ), ainsi que des ressources francophones.
Enfin, certaines extensions fournissent des âgaleriesâ permettant de repĂ©rer ou dĂ©couvrir certains
packages. Câest notamment le cas de htmlwidgets , qui propose une galerie dâextensions proposant des
graphiques interactifs, ou de R Markdown.
â 178 â
Visualiser ses données
Inspection visuelle des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
str . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
glimpse (dplyr) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
look_for (labelled) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
describe (questionr) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Addins de codebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
skim (skimr) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
create_report (DataExplorer) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
makeCodebook (dataMaid) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
scan_data (pointblank) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Au fil des différents chapitres, nous avons abordé diverses fonctions utiles au quotidien et permettant de
visualiser ses données. Ce chapitre se propose de les regrouper.
R> library(questionr)
data(hdv2003)
data(fecondite)
R> load(url("[Link]
a"))
â 179 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
NĂ©anmoins, R propose une interface permettant de visualiser le contenu dâun tableau de donnĂ©es Ă lâaide
de la fonction View :
R> View(hdv2003)
Sous RStudio, on peut aussi afficher la visionneusee (viewer) en cliquant sur la petite icĂŽne en forme
de tableau situĂ©e Ă droite de la ligne dâun tableau de donnĂ©es dans lâonglet Environment du quadrant
supérieur droit (cf. figure ci-aprÚs).
Dans tous les cas, RStudio lancera le viewer dans un onglet dédié dans le quadrant supérieur gauche. Le
visualiseur de RStudio est plus avancé que celui-de base fournit par R. Il est possible de trier les données
selon une variable en cliquant sur le nom de cette derniÚre. Il y a également un champs de recherche et un
bouton Filter donnant accÚs à des options de filtrage avancées.
â 180 â
Visualiser ses données
summary
La fonction summary permet dâavoir une vue rĂ©sumĂ©e dâune variable. Elle sâapplique Ă tout type dâobjets
(y compris un tableau de donnĂ©es entier) et sâadapte Ă celui-ci.
R> summary(hdv2003$age)
R> summary(hdv2003$qualif)
â 181 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> summary(hdv2003)
id age sexe
Min. : 1.0 Min. :18.00 Homme: 899
1st Qu.: 500.8 1st Qu.:35.00 Femme:1101
Median :1000.5 Median :48.00
Mean :1000.5 Mean :48.16
3rd Qu.:1500.2 3rd Qu.:60.00
Max. :2000.0 Max. :97.00
nivetud
Enseignement technique ou professionnel court :463
Enseignement superieur y compris technique superieur:441
Derniere annee d'etudes primaires :341
1er cycle :204
2eme cycle :183
(Other) :256
NA's :112
poids occup
Min. : 78.08 Exerce une profession:1049
1st Qu.: 2221.82 Chomeur : 134
Median : 4631.19 Etudiant, eleve : 94
Mean : 5535.61 Retraite : 392
3rd Qu.: 7626.53 Retire des affaires : 77
Max. :31092.14 Au foyer : 171
Autre inactif : 83
qualif [Link]
Employe :594 Min. : 0.000
Ouvrier qualifie :292 1st Qu.: 1.000
Cadre :260 Median : 2.000
Ouvrier specialise :203 Mean : 3.283
Profession intermediaire:160 3rd Qu.: 5.000
(Other) :144 Max. :22.000
NA's :347
clso relig
Oui : 936 Pratiquant regulier :266
Non :1037 Pratiquant occasionnel :442
Ne sait pas: 27 Appartenance sans pratique :760
Ni croyance ni appartenance:399
Rejet : 93
NSP ou NVPR : 40
[Link] [Link]
Le plus important : 29 Satisfaction :480
Aussi important que le reste:259 Insatisfaction:117
Moins important que le reste:708 Equilibre :451
â 182 â
Visualiser ses données
str
La fonction str est plus complÚte que names . Elle liste les différentes variables, indique leur type et
donne le cas Ă©chĂ©ant des informations supplĂ©mentaires ainsi quâun Ă©chantillon des premiĂšres valeurs
prises par cette variable :
R> str(hdv2003)
â 183 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
I M P O R TA N T
La fonction str est essentielle Ă connaĂźtre et peut sâappliquer Ă nâimporte quel type dâobjet. Câest un
excellent moyen de connaĂźtre en dĂ©tail la structure dâun objet. Cependant, les rĂ©sultats peuvent ĂȘtre
parfois trop détaillés et on lui priviligiera dans certains cas les fonctions suivantes.
glimpse (dplyr)
Lâextension dplyr (voir le chapitre dĂ©diĂ©, page 241), propose une fonction glimpse (ce qui signifie
«aperçu» en anglais) qui permet de visualiser rapidement et de maniĂšre condensĂ©e le contenu dâun
tableau de données.
R> library(dplyr)
glimpse(hdv2003)
Rows: 2,000
Columns: 20
$ id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1âŠ
$ age <int> 28, 23, 59, 34, 71, 35, 60, 47, 20, âŠ
$ sexe <fct> Femme, Femme, Homme, Homme, Femme, FâŠ
$ nivetud <fct> "Enseignement superieur y compris teâŠ
$ poids <dbl> 2634.3982, 9738.3958, 3994.1025, 573âŠ
$ occup <fct> "Exerce une profession", "Etudiant, âŠ
$ qualif <fct> Employe, NA, Technicien, Technicien,âŠ
$ [Link] <int> 8, 2, 2, 1, 0, 5, 1, 5, 4, 2, 3, 4, âŠ
â 184 â
Visualiser ses données
look_for (labelled)
Lâextension labelled propose une fonction look_for , inspirĂ©e de Stata, qui permet de lister les
diffĂ©rentes variables dâun fichier de donnĂ©es, ainsi que leurs principales caractĂ©ristiques :
R> library(labelled)
look_for(hdv2003)
Femme
1er cycle
2eme cycle
â 185 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Chomeur
Etudiant, eleve
Retraite
Au foyer
Autre inactif
Ouvrier qualifie
Technicien
Profession intermediaire
Cadre
Employe
Autre
Non
Ne sait pas
Pratiquant occasionnel
â 186 â
Visualiser ses données
Ni croyance ni appartenance
Rejet
NSP ou NVPR
Peu important
Insatisfaction
Equilibre
Oui
Oui
Oui
Oui
Oui
Oui
â 187 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Oui
Lorsque lâon a un gros tableau de donnĂ©es avec de nombreuses variables, il peut ĂȘtre difficile de retrouver
la ou les variables dâintĂ©rĂȘt. Il est possible dâindiquer Ă look_for un mot-clĂ© pour limiter la recherche.
Par exemple :
Il est Ă noter que si la recherche nâest pas sensible Ă la casse (i.e. aux majuscules et aux minuscules), elle est
sensible aux accents. Il est aussi possible de fournir plusieurs expressions de recherche.
La fonction look_for est par ailleurs compatible avec les Ă©tiquettes de variable de lâextension labelled,
les Ă©tiquettes Ă©tant prise en compte dans la recherche dâune variable.
â 188 â
Visualiser ses données
Ă noter, le rĂ©sultat renvoyĂ© par look_for est un tableau de donnĂ©es qui peut ensuite ĂȘtre aisĂ©ment
manipulĂ© (voir lâaide de la fonction).
describe (questionr)
Lâextension questionr fournit Ă©galement une fonction bien pratique pour dĂ©crire les diffĂ©rentes variables
dâun tableau de donnĂ©es. Il sâagit de describe . Faisons de suite un essai :
R> describe(hdv2003)
$id:
integer: 1 2 3 4 5 6 7 8 9 10 ...
min: 1 - max: 2000 - NAs: 0 (0%) - 2000 unique values
$age:
integer: 28 23 59 34 71 35 60 47 20 28 ...
min: 18 - max: 97 - NAs: 0 (0%) - 78 unique values
$sexe:
nominal factor: "Femme" "Femme" "Homme" "Homme" "Femme" "Femme" "Femme" "Homme"
"Femme" "Homme" ...
2 levels: Homme | Femme
NAs: 0 (0%)
$nivetud:
nominal factor: "Enseignement superieur y compris technique superieur" NA "Derni
ere annee d'etudes primaires" "Enseignement superieur y compris technique superi
eur" "Derniere annee d'etudes primaires" "Enseignement technique ou professionne
l court" "Derniere annee d'etudes primaires" "Enseignement technique ou professi
onnel court" NA "Enseignement technique ou professionnel long" ...
8 levels: N'a jamais fait d'etudes | A arrete ses etudes, avant la derniere anne
â 189 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
e d'etudes primaires | Derniere annee d'etudes primaires | 1er cycle | 2eme cycl
e | Enseignement technique ou professionnel court | Enseignement technique ou pr
ofessionnel long | Enseignement superieur y compris technique superieur
NAs: 112 (5.6%)
$poids:
numeric: 2634.3982157 9738.3957759 3994.1024587 5731.6615081 4329.0940022 8674.6
993828 6165.8034861 12891.640759 7808.8720636 2277.160471 ...
min: 78.0783403 - max: 31092.14132 - NAs: 0 (0%) - 1877 unique values
$occup:
nominal factor: "Exerce une profession" "Etudiant, eleve" "Exerce une professio
n" "Exerce une profession" "Retraite" "Exerce une profession" "Au foyer" "Exerce
une profession" "Etudiant, eleve" "Exerce une profession" ...
7 levels: Exerce une profession | Chomeur | Etudiant, eleve | Retraite | Retire
des affaires | Au foyer | Autre inactif
NAs: 0 (0%)
$qualif:
nominal factor: "Employe" NA "Technicien" "Technicien" "Employe" "Employe" "Ouvr
ier qualifie" "Ouvrier qualifie" NA "Autre" ...
7 levels: Ouvrier specialise | Ouvrier qualifie | Technicien | Profession interm
ediaire | Cadre | Employe | Autre
NAs: 347 (17.3%)
$[Link]:
integer: 8 2 2 1 0 5 1 5 4 2 ...
min: 0 - max: 22 - NAs: 0 (0%) - 19 unique values
$clso:
nominal factor: "Oui" "Oui" "Non" "Non" "Oui" "Non" "Oui" "Non" "Oui" "Non" ...
3 levels: Oui | Non | Ne sait pas
NAs: 0 (0%)
$relig:
nominal factor: "Ni croyance ni appartenance" "Ni croyance ni appartenance" "Ni
croyance ni appartenance" "Appartenance sans pratique" "Pratiquant regulier" "Ni
croyance ni appartenance" "Appartenance sans pratique" "Ni croyance ni apparten
ance" "Appartenance sans pratique" "Pratiquant occasionnel" ...
6 levels: Pratiquant regulier | Pratiquant occasionnel | Appartenance sans prati
que | Ni croyance ni appartenance | Rejet | NSP ou NVPR
NAs: 0 (0%)
$[Link]:
nominal factor: "Peu important" NA "Aussi important que le reste" "Moins importa
nt que le reste" NA "Le plus important" NA "Peu important" NA "Moins important q
ue le reste" ...
â 190 â
Visualiser ses données
4 levels: Le plus important | Aussi important que le reste | Moins important que
le reste | Peu important
NAs: 952 (47.6%)
$[Link]:
nominal factor: "Insatisfaction" NA "Equilibre" "Satisfaction" NA "Equilibre" NA
"Insatisfaction" NA "Satisfaction" ...
3 levels: Satisfaction | Insatisfaction | Equilibre
NAs: 952 (47.6%)
$[Link]:
nominal factor: "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Non" ...
2 levels: Non | Oui
NAs: 0 (0%)
$[Link]:
nominal factor: "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Non" ...
2 levels: Non | Oui
NAs: 0 (0%)
$[Link]:
nominal factor: "Non" "Non" "Non" "Non" "Non" "Non" "Oui" "Oui" "Non" "Non" ...
2 levels: Non | Oui
NAs: 0 (0%)
$cuisine:
nominal factor: "Oui" "Non" "Non" "Oui" "Non" "Non" "Oui" "Oui" "Non" "Non" ...
2 levels: Non | Oui
NAs: 0 (0%)
$bricol:
nominal factor: "Non" "Non" "Non" "Oui" "Non" "Non" "Non" "Oui" "Non" "Non" ...
2 levels: Non | Oui
NAs: 0 (0%)
$cinema:
nominal factor: "Non" "Oui" "Non" "Oui" "Non" "Oui" "Non" "Non" "Oui" "Oui" ...
2 levels: Non | Oui
NAs: 0 (0%)
$sport:
nominal factor: "Non" "Oui" "Oui" "Oui" "Non" "Oui" "Non" "Non" "Non" "Oui" ...
2 levels: Non | Oui
NAs: 0 (0%)
$[Link]:
numeric: 0 1 0 2 3 2 2.9 1 2 2 ...
â 191 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Comme on le voit sur cet exemple, describe nous affiche le type des variables, les premiĂšres valeurs de
chacune, le nombre de valeurs manquantes, le nombre de valeurs différentes (uniques) ainsi que quelques
autres informations suivant le type de variables.
Il est possible de restreindre lâaffichage Ă seulement quelques variables en indiquant le nom de ces
derniĂšres ou une expression de recherche (comme avec lookfor ).
$age:
integer: 28 23 59 34 71 35 60 47 20 28 ...
min: 18 - max: 97 - NAs: 0 (0%) - 78 unique values
$[Link]:
nominal factor: "Peu important" NA "Aussi important que le reste" "Moins importa
nt que le reste" NA "Le plus important" NA "Peu important" NA "Moins important q
ue le reste" ...
4 levels: Le plus important | Aussi important que le reste | Moins important que
le reste | Peu important
NAs: 952 (47.6%)
$[Link]:
nominal factor: "Insatisfaction" NA "Equilibre" "Satisfaction" NA "Equilibre" NA
"Insatisfaction" NA "Satisfaction" ...
3 levels: Satisfaction | Insatisfaction | Equilibre
NAs: 952 (47.6%)
R> describe(hdv2003$sexe)
[2000 obs.]
nominal factor: "Femme" "Femme" "Homme" "Homme" "Femme" "Femme" "Femme" "Homme"
"Femme" "Homme" ...
2 levels: Homme | Femme
NAs: 0 (0%)
n %
Homme 899 45
Femme 1101 55
â 192 â
Visualiser ses données
Enfin, describe est également compatible avec les vecteurs labellisés, page 121.
n %
[1] homme 1420 78.3
[2] femme 394 21.7
Total 1814 100.0
â 193 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
n %
[0] pas d'adulte 0 0.0
[1] un adulte 78 4.3
[2] deux adultes de sexe opposé 439 24.2
[3] deux adultes de mĂȘme sexe 75 4.1
[4] trois adultes ou plus avec lien de parenté 920 50.7
[5] adultes sans lien de parenté 302 16.6
Total 1814 100.0
n %
[1] trĂšs pauvre 335 18.5
[2] pauvre 357 19.7
[3] moyen 402 22.2
[4] riche 350 19.3
[5] trĂšs riche 370 20.4
Total 1814 100.0
Addins de codebook
Lâextension codebook fournit plusieurs addins permettant dâexplorer les Ă©tiquettes des diffĂ©rentes
variables dâun tableau de donnĂ©es. Ils sont accessibles par le menu Addins de RStudio.
On peut aussi lancer les addins manuellement, par exemple avec la commande suivante :
R> codebook::label_browser_static(femmes)
skim (skimr)
Lâextension skimr a pour objectif de fournir une fonction skim comme alternative Ă summary {base} pour
les vecteurs et les tableaux de données afin de fournir plus de statistiques dans un format plus compact.
Elle peut ĂȘtre appliquĂ©e Ă un vecteur donnĂ© ou directement Ă un tableau de donnĂ©es.
â 194 â
Visualiser ses données
R> library(skimr)
skim(hdv2003$cuisine)
Data summary
Name hdv2003$cuisine
Number of columns 1
_______________________
factor 1
________________________
â 195 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> skim(hdv2003)
Data summary
Name hdv2003
Number of columns 20
_______________________
factor 15
numeric 5
________________________
â 196 â
Visualiser ses données
â 197 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Il est possible de sĂ©lectionner des variables Ă la maniĂšre de dplyr. Voir lâaide de contains .
Data summary
Name hdv2003
Number of columns 20
_______________________
factor 2
numeric 2
________________________
â 198 â
Visualiser ses données
R> skim(menages)
Data summary
Name menages
Number of columns 5
_______________________
numeric 5
________________________
â 199 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
create_report (DataExplorer)
Lâextension DataExplorer fournit des outils dâexploration graphique dâun fichier de donnĂ©es. En premier
lieu, sa fonction create_report gĂ©nĂšre un rapport automatique Ă partir dâun tableau de donnĂ©es.
R> library(DataExplorer)
create_report(hdv2003)
Lâextension fournit Ă©galement diffĂ©rentes fonctions graphiques, prĂ©sentĂ©es en dĂ©tail dans la vignette
inclue dans lâextension et visible sur [Link]
[Link].
makeCodebook (dataMaid)
Lâextension dataMaid propose une fonction makeCodebook permettant de gĂ©nĂ©rer une prĂ©sentation de
lâensemble des variables dâun tableau de donnĂ©es, au format PDF, Word ou HTML.
R> library(dataMaid)
makeCodebook(hdv2003)
Vous pouvez cliquer sur ce lien pour voir le PDF produit par dataMaid.
scan_data (pointblank)
Lâextension pointblank propose une fonction scan_data permettant de gĂ©nĂ©rer un rapport automatisĂ©
sur un jeu de données. Le rapport est surtout détaillé pour les variables continues mais ne fournit que
peu dâinformations que les variables catĂ©gorielles. La fonction ne tient pas compte non plus des variables
labellisĂ©es. La fonction export_report permet dâexporter le rapport obtenu au format HTML.
R> library(pointblank)
rapport <- scan_data(hdv2003)
export_report(rapport, filename = "data/scan_data_hdv2003.html")
Vous pouvez cliquer sur ce lien pour voir le fichier HTML produit par pointblank.
â 200 â
Recodage de variables
Renommer des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Convertir une variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Variable numérique ou textuelle en facteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Conversion dâun facteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Conversion dâun vecteur labellisĂ© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Quand convertir les vecteurs labellisés ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Convertir un vecteur labellisé en facteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Convertir un vecteur labellisé en numérique ou en texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Conversion conditionnelle en facteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Nettoyage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Découper une variable numérique en classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Regrouper les modalitĂ©s dâune variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Variables calculées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Combiner plusieurs variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Variables scores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Vérification des recodages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Facteurs et forcats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Modifier les modalitĂ©s dâune variable qualitative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Ordonner les modalitĂ©s dâune variable qualitative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Combiner plusieurs variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
if_else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
case_when . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Recodage et [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
GUIDE-R
Une version actualisée de ce chapitre est disponible sur guide-R : Facteurs et forcats & Combiner
plusieurs variables
â 201 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
NOTE
La version originale de ce chapitre a été écrite par Julien Barnier dans le cadre du support de cours
Introduction Ă R.
WEBIN-R
Ce chapitre est évoqué dans le webin-R #05 (recoder des variables) sur YouTube.
Ce chapitre est évoqué dans le webin-R #06 (régression logistique partie 1) sur YouTube.
Le recodage de variables est une opĂ©ration extrĂȘmement frĂ©quente lors du traitement dâenquĂȘte. Celui-ci
utilise soit lâune des formes dâindexation dĂ©crites prĂ©cĂ©demment, soit des fonctions ad hoc de R.
On passe ici en revue diffĂ©rents types de recodage parmi les plus courants. Les exemples sâappuient,
comme prĂ©cĂ©demment, sur lâextrait de lâenquĂȘte Histoire de vie :
R> library(questionr)
data(hdv2003)
d <- hdv2003
I M P O R TA N T
Les noms de variables peuvent contenir des lettres, des chiffres (mais ils ne peuvent pas commencer
par un chiffre), les symboles . et _ et doivent commencer par une lettre. R fait la différence entre
les majuscules et les minuscules, ce qui signifie que x et X sont deux noms de variable différents. On
Ă©vitera Ă©galement dâutiliser des caractĂšres accentuĂ©s dans les noms de variable. Comme les espaces
ne sont pas autorisés, on pourra les remplacer par un point ou un tiret bas.
On peut lister les noms des variables dâun tableau de donnĂ©es ([Link]) Ă lâaide de la fonction names :
â 202 â
Recodage de variables
R> names(d)
Si lâon utilise dplyr (voir chapitre dĂ©diĂ©, page 241), on peut facilement renommer une variable avec
rename :
â 203 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
â 204 â
Recodage de variables
NOTE
La fonction names peut Ă©galement ĂȘtre utilisĂ©e pour renommer lâensemble des variables. Si par
exemple on souhaitait passer les noms de toutes les variables en majuscules, on pourrait faire :
Homme Femme
899 1101
Ce type de renommage peut ĂȘtre utile lorsquâon souhaite passer en revue tous les noms de variables
dâun fichier importĂ© pour les corriger le cas Ă©chĂ©ant. Pour faciliter un peu ce travail pas forcĂ©ment
passionnant, on peut utiliser la fonction dput :
R> dput(names(d))
On obtient en rĂ©sultat la liste des variables sous forme de vecteur dĂ©clarĂ©. On nâa plus alors quâĂ
copier/coller cette chaĂźne, rajouter names(d) <- devant et modifier un Ă un les noms des variables.
â 205 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Non Oui
1147 853
[1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
[12] "11" "12" "13" "14" "15" "16" "18" "22"
La conversion dâun facteur ou dâune variable numĂ©rique en variable caractĂšres peut se faire Ă lâaide de la
fonction [Link] :
â 206 â
Recodage de variables
commandes suivantes gĂ©nĂšre un message dâavertissement, tandis que les deux autres fonctionnent :
Dans le premier cas, le message dâavertissement indique que toutes les modalitĂ©s « Ouvrier specialise » de
notre variable qualif ont été remplacées par des valeurs manquantes NA .
Enfin, une variable de type caractĂšres dont les valeurs seraient des nombres peut ĂȘtre convertie en
variable numérique avec la fonction [Link] .
R> [Link](v)
â 207 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
I M P O R TA N T
Lorsque lâon convertit un facteur avec [Link] , on obtient le numĂ©ro de chaque facteur
(premiÚre modalité, seconde modalité, etc.). Si la valeur numérique qui nous intéresse est en fait
contenu dans le nom des modalités, il faut convertir au préalable notre facteur en variable textuelle.
R> [Link](vf)
[1] 1 2 3 4 1 3
R> [Link]([Link](vf))
ATTENTION : la valeur numĂ©rique associĂ©e Ă chaque Ă©tiquette dâun facteur change lorsque lâon
modifie lâordre des Ă©tiquettes dâun facteur. DĂšs lors, il est fortement dĂ©conseillĂ© de convertir un
facteur en variable numérique.
Nous verrons dans les chapitres dâanalyse, notamment quand il sâagit de calculer des modĂšles, quâil
est nécessaire de coder les variables catégorielles sous forme de facteurs. Et il est préférable pour les
variables continues de leur retirer la classe haven_labelled .
â 208 â
Recodage de variables
Mais il faut noter que ces Ă©tiquettes de valeur nâindique pas pour autant de maniĂšre systĂ©matique le type
de variable (catĂ©gorielle ou continue). Les vecteurs labellisĂ©s nâont donc pas vocation Ă ĂȘtre utilisĂ©s pour
lâanalyse, notamment le calcul de modĂšles statistiques. Ils doivent ĂȘtre convertis en facteurs (pour les
variables catégorielles) ou en vecteurs numériques (pour les variables continues).
La question qui peut se poser est donc de choisirĂ quel moment cette conversion doit avoir lieu dans un
processus dâanalyse. On peut considĂ©rer deux approches principales.
Dans lâapproche A, les vecteurs labellisĂ©s sont convertis juste aprĂšs lâimport des donnĂ©es, en utilisant les
fonctions unlabelled , to_factor ou unclass qui sont présentées ci-aprÚs. DÚs lors, toute la partie
de nettoyage et de recodage des données se fera en utilisant les fonctions classiques de R.
Dans lâapproche B, les vecteurs labellisĂ©s sont conservĂ©s pour lâĂ©tape de nettoyage et de recodage des
donnĂ©es. Dans ce cas lĂ , on pourra avoir recours aux fonctions de lâextension labelled qui facilitent la
gestion des données labellisées. Cette approche est particuliÚrement intéressante quand (i) on veut
pouvoir se référer au dictionnaire de codification fourni avec les données sources et donc on veut
conserver le codage original et/ou (ii) quand les donnĂ©es devront faire lâobjet dâun rĂ©export aprĂšs
transformation. Par contre, comme dans lâapproche A, il faudra prĂ©voir une conversion des variables
labellisĂ©es au moment de lâanalyse.
â 209 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
labelled1.
R> library(labelled)
v <- labelled(c(1, 2, 9, 3, 3, 2, NA), c(oui = 1, "peut-ĂȘtre" = 2, non = 3, "n
e sait pas" = 9))
v
<labelled<double>[7]>
[1] 1 2 9 3 3 2 NA
Labels:
value label
1 oui
2 peut-ĂȘtre
3 non
9 ne sait pas
R> to_factor(v)
Il possible dâindiquer si lâon souhaite, comme Ă©tiquettes du facteur, utiliser les Ă©tiquettes de valeur (par
dĂ©faut), les valeurs elles-mĂȘmes, ou bien les Ă©tiquettes de valeurs prĂ©fixĂ©es par la valeur dâorigine
indiquée entre crochets.
[1] 1 2 9 3 3 2 <NA>
Levels: 1 2 3 9
1. On priviligiera la fonction to_factor Ă la fonction as_factor de lâextension haven, la premiĂšre ayant plus de
possibilités et un comportement plus consistent.
â 210 â
Recodage de variables
Par dĂ©faut, les Ă©tiquettes du facteur seront triĂ©s selon lâordre des Ă©tiquettes de valeur. Mais cela peut ĂȘtre
modifiĂ© avec lâargument sort_levels si lâon prĂ©fĂšre trier selon les valeurs ou selon lâordre alphabĂ©tique
des étiquettes.
<labelled<double>[7]>
[1] 1 2 9 3 3 2 NA
Labels:
â 211 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
value label
1 oui
2 peut-ĂȘtre
3 non
9 ne sait pas
R> y
<labelled<character>[4]>
[1] f f h f
Labels:
value label
f femme
h homme
Pour leur retirer leur caractĂšre labellisĂ© et revenir Ă leur classe dâorigine, on peut utiliser la fonction
unclass .
R> unclass(x)
[1] 1 2 9 3 3 2 NA
attr(,"labels")
oui peut-ĂȘtre non ne sait pas
1 2 3 9
R> unclass(y)
à noter que dans ce cas-là , les étiquettes sont conservées comme attributs du vecteur.
Une alternative est dâutiliser remove_labels qui supprimera toutes les Ă©tiquettes, y compris les
étiquettes de variable. Pour conserver les étiquettes de variables et ne supprimer que les étiquettes de
valeurs, on indiquera keep_var_label = TRUE .
â 212 â
Recodage de variables
[1] 1 2 9 3 3 2 NA
[1] 1 2 9 3 3 2 NA
attr(,"label")
[1] "Etiquette de variable"
R> remove_labels(y)
Dans le cas dâun vecteur numĂ©rique labellisĂ© que lâon souhaiterait convertir en variable textuelle, on
pourra utiliser to_character à la place de to_factor qui comme sa soeur utilisera les étiquettes de
valeurs.
R> to_character(x)
Une bonne pratique est de vérifier chaque variable inclue dans une analyse, une à une.
Cependant, une rÚgle qui fonctionne dans 90% des cas est de convertir un vecteur labellisé en facteur
seulement si toutes les valeurs observĂ©es dans le vecteur disposent dâune Ă©tiquette de valeur
correspondante. Câest ce que propose la fonction unlabelled qui peut mĂȘme ĂȘtre appliquĂ© Ă tout un
tableau de données. Par défaut, elle fonctionne ainsi :
â 213 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
1. les variables non labellisĂ©es restent inchangĂ©es (variables f et g dans lâexemple ci-dessous);
2. si toutes les valeurs observĂ©es dâune variable labellisĂ©es, elles sont converties en facteurs
(variables b et c);
3. sinon, on leur applique unclass (variables a, d et e).
Rows: 4
Columns: 7
$ a <dbl+lbl> 1, 1, 2, 3
$ b <dbl+lbl> 1, 1, 2, 3
$ c <dbl+lbl> 1, 1, 2, 2
$ d <chr+lbl> "a", "a", "b", "c"
$ e <hvn_lbl_> 1, 9, 1, 2
$ f <int> 1, 2, 3, 4
$ g <date> 2020-01-01, 2020-02-01, 2020-03-01, 2020-04-01
R> dplyr::glimpse(unlabelled(df))
Rows: 4
Columns: 7
$ a <dbl> 1, 1, 2, 3
$ b <fct> No, No, Yes, DK
$ c <fct> No, No, Yes, Yes
$ d <chr> "a", "a", "b", "c"
$ e <fct> No, NA, No, Yes
$ f <int> 1, 2, 3, 4
$ g <date> 2020-01-01, 2020-02-01, 2020-03-01, 2020-04-01
On peut indiquer certaines options, par exemple drop_unused_labels = TRUE pour supprimer des
facteurs créés les niveaux non observées dans les données (voir la variable c) ou
â 214 â
Recodage de variables
user_na_to_na = TRUE pour convertir les valeurs manquantes de type SPSS en NA (voir la variable
e, notez quâici, du fait de cette conversion, toutes les valeurs ont une Ă©tiquette et la variable est alors
convertie en facteur.)
Rows: 4
Columns: 7
$ a <dbl> 1, 1, 2, 3
$ b <fct> [1] No, [1] No, [2] Yes, [3] DK
$ c <fct> [1] No, [1] No, [2] Yes, [2] Yes
$ d <chr> "a", "a", "b", "c"
$ e <fct> [1] No, NA, [1] No, [2] Yes
$ f <int> 1, 2, 3, 4
$ g <date> 2020-01-01, 2020-02-01, 2020-03-01, 2020-04-01
Rows: 4
Columns: 7
$ a <dbl> 1, 1, 2, 3
$ b <fct> No, No, Yes, DK
$ c <fct> No, No, Yes, Yes
$ d <chr> "a", "a", "b", "c"
$ e <fct> No, NA, No, Yes
$ f <int> 1, 2, 3, 4
$ g <date> 2020-01-01, 2020-02-01, 2020-03-01, 2020-04-01
Rows: 4
Columns: 7
$ a <dbl> 1, 1, 2, 3
$ b <fct> No, No, Yes, DK
$ c <fct> No, No, Yes, Yes
$ d <chr> "a", "a", "b", "c"
$ e <fct> No, NA, No, Yes
$ f <int> 1, 2, 3, 4
$ g <date> 2020-01-01, 2020-02-01, 2020-03-01, 2020-04-01
â 215 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Nettoyage
Lâextension cleaner propose plusieurs fonctions utiles lorsque lâon doit nettoyer une variable mal
encodées.
R> library(cleaner)
freq
R> clean_logical(
x = c("Positive", "Negative", "Unknown", "Unknown"),
true = "pos",
false = "neg"
)
â 216 â
Recodage de variables
R> clean_numeric("qwerty123456")
[1] 123456
[1] 0.143
R> # Facteurs
gender_age <- c("male 0-50", "male 50+", "female 0-50", "female 50+")
gender_age
[1] M M F F
Levels: M F
â 217 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> clean_factor(
gender_age,
levels = c(
"female" = "Group A",
"male 50+" = "Group B",
".*" = "Other"
)
)
R> # Dates
clean_Date("12-06-2012")
[1] "2012-06-12"
R> clean_Date(38071)
[1] "2004-03-25"
â 218 â
Recodage de variables
I M P O R TA N T
Lâextension cleaner propose Ă©galement une fonction freq qui peut rentrer en conflit avec la fonction
freq de questionr. Dans ce cas, on pourra soit appeler explicitement la version de questionr avec
lâĂ©criture questionr::freq() . Une autre possibilitĂ© est de «dĂ©charger» (le contraire de charger en
mĂ©moire) lâextension cleaner une fois que lâon en nâa plus besoin.
⹠breaks indique soit le nombre de classes souhaité, soit, si on lui fournit un vecteur, les limites
des classes ;
⹠labels permet de modifier les noms de modalités attribués aux classes ;
⹠[Link] et right influent sur la maniÚre dont les valeurs situées à la frontiÚre des
classes seront inclues ou exclues ;
⹠[Link] indique le nombre de chiffres aprÚs la virgule à conserver dans les noms de modalités.
Prenons tout de suite un exemple et tentons de découper notre variable age en cinq classes et de placer
le résultat dans une nouvelle variable nommée age5cl :
Par dĂ©faut R nous a bien créé cinq classes dâamplitudes Ă©gales. La premiĂšre classe va de 16,9 Ă 32,2 ans (en
fait de 17 Ă 32), etc.
Les frontiÚres de classe seraient plus présentables si elles utilisaient des nombres ronds. On va donc
spécifier manuellement le découpage souhaité, par tranches de 20 ans :
â 219 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> d$age20 <- cut(d$age, c(0, 20, 40, 60, 80, 100))
table(d$age20)
On aurait pu tenir compte des Ăąges extrĂȘmes pour la premiĂšre et la derniĂšre valeur :
R> range(d$age)
[1] 18 97
R> d$age20 <- cut(d$age, c(18, 20, 40, 60, 80, 97))
table(d$age20)
Les symboles dans les noms attribués aux classes ont leur importance : ( signifie que la frontiÚre de la
classe est exclue, tandis que [ signifie quâelle est incluse. Ainsi, (20,40] signifie « strictement supĂ©rieur
à 20 et inférieur ou égal à 40 ».
On remarque que du coup, dans notre exemple précédent, la valeur minimale, 18, est exclue de notre
premiĂšre classe, et quâune observation est donc absente de ce dĂ©coupage. Pour rĂ©soudre ce problĂšme on
peut soit faire commencer la premiĂšre classe Ă 17, soit utiliser lâoption [Link]=TRUE :
R> d$age20 <- cut(d$age, c(17, 20, 40, 60, 80, 97))
table(d$age20)
R> d$age20 <- cut(d$age, c(18, 20, 40, 60, 80, 97), [Link] = TRUE)
table(d$age20)
â 220 â
Recodage de variables
On peut Ă©galement modifier le sens des intervalles avec lâoption right=FALSE , et indiquer
manuellement les noms des modalités avec labels :
R> d$age20 <- cut(d$age, c(18, 20, 40, 60, 80, 97), right = FALSE, [Link]
= TRUE)
table(d$age20)
R> d$age20 <- cut(d$age, c(18, 20, 40, 60, 80, 97), [Link] = TRUE, labels
= c("<20ans", "21-40 ans", "41-60ans", "61-80ans", ">80ans"))
table(d$age20)
â 221 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
NOTE
Lâextension questionr propose une interface interactive Ă la fonction cut , nommĂ©e icut . Elle
sâutilise de la maniĂšre suivante :
Vous pouvez alors indiquer les limites de vos classes ainsi que quelques options complémentaires. Ces
limites sont reprĂ©sentĂ©es graphiquement sur lâhistogramme de la variable dâorigine.
Lâonglet VĂ©rification affiche un tri Ă plat et un graphique en barres de la nouvelle variable. Une fois le
rĂ©sultat satisfaisant, vous pouvez rĂ©cupĂ©rer le code gĂ©nĂ©rĂ© pour lâinclure dans votre script.
Lâextension questionr propose aussi une fonction [Link] permettant de dĂ©couper une variable
â 222 â
Recodage de variables
numérique en un nombre de classes donné ayant des efffectifs semblables. Il suffit de lui passer le
nombre de classes en argument :
[Link] admet les mĂȘmes autres options que cut ( [Link] , right , labels ⊠).
Ainsi, si on veut recoder la variable qualif dans une variable [Link] plus « compacte », on peut
utiliser :
R> table(d$qualif)
â 223 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
On aurait pu représenter ce recodage de maniÚre plus compacte, notamment en commençant par copier
le contenu de qualif dans [Link], ce qui permet de ne pas sâoccuper de ce qui ne change pas.
Il est cependant nécessaire de ne pas copier qualif sous forme de facteur, sinon on ne pourrait ajouter
de nouvelles modalités. On copie donc la version caractÚres de qualif grùce à la fonction
[Link] :
On peut faire une version encore plus compacte en utilisant lâopĂ©rateur logique ou ( | ) :
â 224 â
Recodage de variables
Enfin, pour terminer ce petit tour dâhorizon, on peut Ă©galement remplacer lâopĂ©rateur | par %in% , qui
peut parfois ĂȘtre plus lisible :
Dans tous les cas le résultat obtenu est une variable de type caractÚre. On pourra la convertir en facteur
par un simple :
Si on souhaite recoder les valeurs manquantes, il suffit de faire appel Ă la fonction [Link] :
R> table(d$[Link])
â 225 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
â 226 â
Recodage de variables
NOTE
questionr propose une interface interactive pour le recodage dâune variable qualitative (renommage
et regroupement de modalitĂ©s). Cette fonction, nommĂ©e irec , sâutilise de la maniĂšre suivante :
Capture de irec
Vous pouvez alors sélectionner différentes options, et pour chaque ancienne modalité, indiquer la
nouvelle valeur correspondante. Pour regrouper des modalités, il suffit de leur assigner des nouvelles
valeurs identiques. Dans tous les cas nâhĂ©sitez pas Ă expĂ©rimenter, lâinterface se contente de gĂ©nĂ©rer
du code R Ă copier/coller dans votre script mais ne lâexĂ©cute pas, et ne modifie donc jamais vos
â 227 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
données !
Lâonglet VĂ©rification affiche un tri croisĂ© de lâancienne et de la nouvelle variable pour vĂ©rifier que le
recodage est correct. Une fois le résultat satisfaisant, vous pouvez récupérer le code généré dans
lâonglet Code pour lâinclure dans votre script.
NOTE
Les exemples prĂ©cĂ©dents montrent bien quâil est parfois malaisĂ© dâutiliser des facteurs lorsque lâon
recode des variables. Les vecteurs labellisés sont, quant à eux, plus souples. Attention : avec des
vecteurs labellisés, on utilisera les valeurs sous-jacentes et non les étiquettes pour écrire des
conditions.
R> data(fecondite)
library(labelled)
femmes %>% look_for("educ")
Variables calculées
La crĂ©ation dâune variable numĂ©rique Ă partir de calculs sur une ou plusieurs autres variables numĂ©riques
se fait trĂšs simplement.
Supposons que lâon souhaite calculer une variable indiquant lâĂ©cart entre le nombre dâheures passĂ©es Ă
regarder la télévision et la moyenne globale de cette variable. On pourrait alors faire :
[1] 0 12
â 228 â
Recodage de variables
[1] 2.247
[1] 4.715e-17
Autre exemple tirĂ© du jeu de donnĂ©es rp99 : si on souhaite calculer le pourcentage dâactifs dans chaque
commune, on peut diviser la population active [Link] par la population totale [Link].
R> load(url("[Link]
a"))
â 229 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Les combinaisons de variables un peu complexes nécessitent parfois un petit travail de réflexion. En
particulier, lâordre des commandes de recodage a parfois une influence dans le rĂ©sultat final.
Pour combiner rapidement plusieurs variables entre elles, on peut aussi avoir recours Ă la fonction
interaction qui créra un facteur avec un niveau pour chaque combinaison de modalités des variables
sources.
â 230 â
Recodage de variables
34 38 291
Femme.21-40 ans Homme.41-60ans Femme.41-60ans
369 352 428
Homme.61-80ans Femme.61-80ans Homme.>80ans
205 231 17
Femme.>80ans
35
Variables scores
Une variable score est une variable calculĂ©e en additionnant des poids accordĂ©s aux modalitĂ©s dâune sĂ©rie
de variables qualitatives.
Pour prendre un exemple tout Ă fait arbitraire, imaginons que nous souhaitons calculer un score
dâactivitĂ©s extĂ©rieures. Dans ce score on considĂšre que le fait dâaller au cinĂ©ma « pĂšse » 10, celui de pĂȘcher
ou chasser vaut 30 et celui de faire du sport vaut 20. On pourrait alors calculer notre score de la maniĂšre
suivante :
0 10 20 30 40 50 60
800 342 229 509 31 41 48
Cette notation Ă©tant un peu lourde, on peut lâallĂ©ger un peu en utilisant la fonction ifelse . Celle-ci
prend en argument une condition et deux valeurs. Si la condition est vraie elle retourne la premiĂšre valeur,
sinon elle retourne la seconde.
0 10 20 30 40 50 60
800 342 229 509 31 41 48
â 231 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Pour vérifier tout cela, le plus simple est sans doute de faire des tableaux croisés entre la variable recodée
et celles ayant servi au recodage, Ă lâaide des fonctions table ou xtabs , et de vĂ©rifier le nombre de
valeurs manquantes dans la variable recodée avec summary , freq ou table .
Par exemple :
Non Oui
Bricolage seulement 437 0
Cuisine et Bricolage 0 416
Cuisine seulement 0 465
Ni cuisine ni bricolage 682 0
Non Oui
Bricolage seulement 0 437
Cuisine et Bricolage 0 416
Cuisine seulement 465 0
Ni cuisine ni bricolage 682 0
â 232 â
Recodage de variables
Facteurs et forcats
forcats est une extension facilitant la manipulation des variables qualitatives, quâelles soient sous forme
de vecteurs character ou de facteurs. Elle fait partie du tidyverse, et est donc automatiquement
chargée par :
R> library(tidyverse)
Il existe plusieurs possibilités pour effectuer ce type de recodage, mais ici on va utiliser la fonction
fct_recode de lâextension forcats. Celle-ci prend en argument une liste de recodages sous la forme
"Nouvelle valeur" = "Ancienne valeur" .
Un exemple :
R> freq(hdv2003$qualif)
â 233 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
freq(hdv2003$qualif5)
Attention, les anciennes valeurs saisies doivent ĂȘtre exactement Ă©gales aux valeurs des modalitĂ©s de la
variable recodĂ©e : toute diffĂ©rence dâaccent ou dâespace fera que ce recodage ne sera pas pris en compte.
Dans ce cas, forcats affiche un avertissement nous indiquant quâune valeur saisie nâa pas Ă©tĂ© trouvĂ©e
dans les modalités de la variable :
Si on souhaite recoder une modalité de la variable en NA , il faut (contre intuitivement) lui assigner la
valeur NULL :
freq(hdv2003$qualif_rec)
Ă lâinverse, si on souhaite recoder les NA dâune variable, on utilisera la fonction fct_explicit_na , qui
convertit toutes les valeurs manquantes ( NA ) dâun facteur en une modalitĂ© spĂ©cifique :
freq(hdv2003$qualif_rec)
Dâautres fonctions sont proposĂ©es par forcats pour faciliter certains recodage, comme fct_collapse ,
qui propose une autre syntaxe pratique quand on doit regrouper ensemble des modalités :
â 234 â
Recodage de variables
freq(hdv2003$qualif_rec)
fct_other , qui regroupe une liste de modalitĂ©s en une seule modalitĂ© âOtherâ :
freq(hdv2003$qualif_rec)
fct_lump , qui regroupe automatiquement les modalités les moins fréquentes en une seule modalité
âOtherâ (avec possibilitĂ© dâindiquer des seuils de regroupement) :
freq(hdv2003$qualif_rec)
On peut ordonner les modalitĂ©s dâun facteur manuellement, par exemple avec la fonction
fct_relevel() de lâextension forcats :
Une autre possibilitĂ© est dâordonner les modalitĂ©s dâun facteur selon les valeurs dâune autre variable. Par
exemple, si on reprĂ©sente le boxplot de la rĂ©partition de lâĂąge selon le statut dâoccupation :
â 235 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> library(ggplot2)
ggplot(hdv2003) +
geom_boxplot(aes(x = occup, y = age))
Le graphique pourrait ĂȘtre plus lisible si les modalitĂ©s Ă©taient triĂ©es par Ăąge median croissant. Ceci est
possible en utilisant fct_reorder . Celle-ci prend 3 arguments : le facteur à réordonner, la variable dont
les valeurs doivent ĂȘtre utilisĂ©es pour ce rĂ©ordonnancement, et enfin une fonction Ă appliquer Ă cette
deuxiĂšme variable.
â 236 â
Recodage de variables
ggplot(hdv2003) +
geom_boxplot(aes(x = occup_age, y = age))
if_else
if_else prend trois arguments : un test, une valeur Ă renvoyer si le test est vrai, et une valeur Ă renvoyer
si le test est faux.
â 237 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
La fonction devient plus intéressante avec des tests combinant plusieurs variables. Par exemple,
imaginons quâon souhaite crĂ©er une nouvelle variable indiquant les hommes de plus de 60 ans :
freq(hdv2003$statut)
case_when
case_when est une gĂ©nĂ©ration du if_else qui permet dâindiquer plusieurs tests et leurs valeurs
associées.
Imaginons quâon souhaite crĂ©er une nouvelle variable permettant dâidentifier les hommes de plus de 60
ans, les femmes de plus de 60 ans, et les autres. On peut utiliser la syntaxe suivante :
freq(hdv2003$statut)
case_when prend en arguments une sĂ©rie dâinstructions sous la forme condition ~ valeur . Il les
exĂ©cute une par une, et dĂšs quâune condition est vraie, il renvoit la valeur associĂ©e.
La clause TRUE ~ "Autre" permet dâassigner une valeur Ă toutes les lignes pour lesquelles aucune des
conditions prĂ©cĂ©dentes nâest vraie.
â 238 â
Recodage de variables
I M P O R TA N T
Attention : comme les conditions sont testĂ©es lâune aprĂšs lâautre et que la valeur renvoyĂ©e est celle
correspondant Ă la premiĂšre condition vraie, lâordre de ces conditions est trĂšs important. Il faut
absolument aller du plus spécifique au plus général.
freq(hdv2003$statut)
Comme la condition sexe == "Homme" est plus générale que sexe == "Homme" & age > 60 ,
cette deuxiĂšme condition nâest jamais testĂ©e ! On nâobtiendra jamais la valeur correspondante.
Pour que ce recodage fonctionne il faut donc changer lâordre des conditions pour aller du plus
spécifique au plus général :
freq(hdv2003$statut)
Vous pouvez trouver des exercices avec leur solution dans lâIntroduction Ă R et au tidyverse de Julien
Barnier.
Pour aller plus loin, R for Data Science de Garrett Grolemund et Hadley Wickham.
Recodage et [Link]
Nous aborderons dans un prochain chapitre, page 259 lâextension [Link] qui Ă©tend les tableaux de
données et modifie complÚtement la syntaxe utilisée entre les crochets. Elle nécessite un petit temps
dâadaptation mais, une fois maĂźtrisĂ©e, elle facile le quotidien lorsquâil sâagit de manipuler et recoder les
données. Ci-dessous, un petit avant-goût, reprenons quelques exemples précédents.
â 239 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> library([Link])
dt <- [Link](hdv2003)
dt[, [Link] := 0]
dt[cinema == "Oui", [Link] := [Link] + 10]
dt[[Link] == "Oui", [Link] := [Link] + 30]
dt[sport == "Oui", [Link] := [Link] + 20]
table(dt$[Link])
R> table(dt$[Link])
R> table(dt$[Link])
â 240 â
Manipuler les données avec
dplyr
Préparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Les verbes de dplyr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
slice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
select, rename et relocate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
arrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
mutate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Enchaßner les opérations avec le «pipe» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Opérations groupées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
group_by . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
summarise et count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Grouper selon plusieurs variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Autres fonctions utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
sample_n et sample_frac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
lead et lag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
tally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
distinct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Fonctions avancées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
dplyr et [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
dplyr et survey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
GUIDE-R
Une version actualisée de ce chapitre est disponible sur guide-R : dplyr & Le pipe
â 241 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
NOTE
La version originale de ce chapitre a été écrite par Julien Barnier dans le cadre de son Introduction à R
et au tidyverse.
WEBIN-R
Ce chapitre est évoqué dans le webin-R #04 (manipuler les données avec dplyr) sur YouTube.
dplyr est une extension facilitant le traitement et la manipulation de données contenues dans une ou
plusieurs tables (quâil sâagisse de data frame ou de tibble). Elle propose une syntaxe claire et cohĂ©rente, sous
formes de verbes, pour la plupart des opérations de ce type.
Par ailleurs, les fonctions de dplyr sont en général plus rapides que leur équivalent sous R de base, elles
permettent donc de traiter des données de grande dimension1.
dplyr part du principe que les données sont tidy (voir la section consacrée aux tidy data, page 64). Les
fonctions de lâextension peuvent sâappliquer Ă des tableaux de type [Link] ou tibble , et elles
retournent systématiquement un tibble (voir la section dédiée, page 65).
Préparation
dplyr fait partie du coeur du tidyverse, elle est donc chargée automatiquement avec :
R> library(tidyverse)
R> library(dplyr)
Dans ce qui suit on va utiliser les donnĂ©es du jeu de donnĂ©es nycflights13, contenu dans lâextension du
mĂȘme nom (quâil faut donc avoir installĂ©). Celui-ci correspond aux donnĂ©es de tous les vols au dĂ©part dâun
des trois aĂ©roports de New-York en 2013. Il a la particularitĂ© dâĂȘtre rĂ©parti en trois tables :
âą flights contient des informations sur les vols : date, dĂ©part, destination, horaires, retardâŠ
⹠airports contient des informations sur les aéroports
⹠airlines contient des données sur les compagnies aériennes
1. Elles sont cependant moins rapides que les fonctions de [Link], voir le chapitre dédié, page 259
â 242 â
Manipuler les données avec dplyr
R> library(nycflights13)
## Chargement des trois tables du jeu de données
data(flights)
data(airports)
data(airlines)
Normalement trois objets correspondant aux trois tables ont dĂ» apparaĂźtre dans votre environnement.
Ces trois tableaux sont au format tibble. Il sâagit dâune extension des tableaux de donnĂ©es utilisĂ© par
le tidyverse. Les tibble {data-pkg=âtibble} sâutilisent comme des [Link] , avec justes quelques
différentes :
slice
Le verbe slice sélectionne des lignes du tableau selon leur position. On lui passe un chiffre ou un
vecteur de chiffres.
â 243 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
filter
filter sĂ©lectionne des lignes dâun tableau de donnĂ©es selon une condition. On lui passe en paramĂštre
un test, et seules les lignes pour lesquelles ce test renvoit TRUE (vrai) sont conservées.
Par exemple, si on veut sélectionner les vols du mois de janvier, on peut filtrer sur la variable month de la
maniĂšre suivante :
Si on veut uniquement les vols avec un retard au départ (variable dep_delay) compris entre 10 et 15
minutes :
Si on passe plusieurs arguments Ă filter , celui-ci rajoute automatiquement une condition et entre
les conditions. La ligne ci-dessus peut donc Ă©galement ĂȘtre Ă©crite de la maniĂšre suivante, avec le mĂȘme
résultat :
Enfin, on peut également placer des fonctions dans les tests, qui nous permettent par exemple de
sélectionner les vols avec la plus grande distance :
Si on fait prĂ©cĂ©der le nom dâun - , la colonne est Ă©liminĂ©e plutĂŽt que sĂ©lectionnĂ©e :
select comprend toute une série de fonctions facilitant la sélection de multiples colonnes. Par exemple,
starts_with , ends_width , contains ou matches permettent dâexprimer des conditions sur les
â 244 â
Manipuler les données avec dplyr
noms de variables :
La syntaxe colonne1:colonne2 permet de sélectionner toutes les colonnes situées entre colonne1 et
colonne2 incluses2 :
all_of et any_of permettent de fournir une liste de variables Ă extraire sous forme de vecteur textuel.
Alors que all_of renverra une erreur si une variable nâest pas trouvĂ©e dans le tableau de dĂ©part,
any_of sera moins stricte.
where permets de sĂ©lectionner des variables Ă partir dâune fonction qui renvoie une valeur logique. Par
exemple, pour sélectionner seulement les variables textuelles.
select peut ĂȘtre utilisĂ©e pour rĂ©ordonner les colonnes dâune table en utilisant la fonction
everything() , qui sĂ©lectionne lâensemble des colonnes non encore sĂ©lectionnĂ©es. Ainsi, si on souhaite
faire passer la colonne name en premiĂšre position de la table airports , on peut faire :
Pour réordonner des colonnes, on pourra aussi avoir recours à relocate en indiquant les premiÚres
variables. IL nâest pas nĂ©cessaire dâajouter everything() car avec relocate toutes les variables sont
conservées.
2. Ă noter que cette opĂ©ration est un peu plus âfragileâ que les autres, car si lâordre des colonnes change elle peut
renvoyer un résultat différent.
â 245 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Une variante de select est rename 3, qui permet de renommer facilement des colonnes. On lâutilise
en lui passant des paramĂštres de la forme nouveau_nom = ancien_nom . Ainsi, si on veut renommer les
colonnes lon et lat de airports en longitude et latitude :
Si les noms de colonnes comportent des espaces ou des caractÚres spéciaux, on peut les entourer de
guillemets ( " ) ou de quotes inverses ( ` ) :
arrange
arrange rĂ©ordonne les lignes dâun tableau selon une ou plusieurs colonnes.
On peut trier selon plusieurs colonnes. Par exemple selon le mois, puis selon le retard au départ :
Si on veut trier selon une colonne par ordre décroissant, on lui applique la fonction desc() :
Combiné avec slice , arrange permet par exemple de sélectionner les trois vols ayant eu le plus de
retard :
3. Il est Ă©galement possible de renommer des colonnes directement avec select , avec la mĂȘme syntaxe que pour
rename .
â 246 â
Manipuler les données avec dplyr
mutate
mutate permet de créer de nouvelles colonnes dans le tableau de données, en général à partir de
variables existantes.
Par exemple, la table airports contient lâaltitude de lâaĂ©roport en pieds. Si on veut crĂ©er une nouvelle
variable alt_m avec lâaltitude en mĂštres, on peut faire :
On peut créer plusieurs nouvelles colonnes en une seule fois, et les expressions successives peuvent
prendre en compte les rĂ©sultats des calculs prĂ©cĂ©dents. Lâexemple suivant convertit dâabord la distance en
kilomĂštres dans une variable distance_km, puis utilise cette nouvelle colonne pour calculer la vitesse
en km/h.
à noter que mutate est évidemment parfaitement compatible avec les fonctions vues dans le chapitre
sur les recodages, page 201 : fonctions de forcats, if_else , case_when âŠ
Lâavantage dâutiliser mutate est double. Dâabord il permet dâĂ©viter dâavoir Ă saisir le nom du tableau de
donnĂ©es dans les conditions dâun if_else ou dâun case_when :
Utiliser mutate pour les recodages permet aussi de les intégrer dans un pipeline de traitement de
données, concept présenté dans la section suivante.
â 247 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Une version actualisée de cette section est disponible sur guide-R : Le pipe
Quand on manipule un tableau de donnĂ©es, il est trĂšs frĂ©quent dâenchaĂźner plusieurs opĂ©rations. On va par
exemple filtrer pour extraire une sous-population, sélectionner des colonnes puis trier selon une variable.
Dans ce cas on peut le faire de deux maniĂšres diffĂ©rentes. La premiĂšre est dâeffectuer toutes les
opérations en une fois en les «emboßtant» :
Une autre maniĂšre de faire est dâeffectuer les opĂ©rations les unes aprĂšs les autres, en stockant les
résultats intermédiaires dans un objet temporaire :
â 248 â
Manipuler les données avec dplyr
Câest nettement plus lisible, lâordre des opĂ©rations est le bon, et les paramĂštres sont bien rattachĂ©s Ă
leur fonction. Par contre, ça reste un peu âverbeuxâ, et on crĂ©e un objet temporaire tmp dont on nâa pas
réellement besoin.
Pour simplifier et améliorer encore la lisibilité du code, on va utiliser un nouvel opérateur, baptisé pipe4.
Le pipe se note %>% , et son fonctionnement est le suivant : si jâexĂ©cute expr %>% f , alors le rĂ©sultat de
lâexpression expr , Ă gauche du pipe, sera passĂ© comme premier argument Ă la fonction f , Ă droite du
pipe, ce qui revient à exécuter f(expr) .
Ce qui est intĂ©ressant dans cette histoire, câest quâon va pouvoir enchaĂźner les pipes. PlutĂŽt que dâĂ©crire :
On va pouvoir faire :
à chaque fois, le résultat de ce qui se trouve à gauche du pipe est passé comme premier argument à ce
qui se trouve Ă droite : on part de lâobjet flights , quâon passe comme premier argument Ă la fonction
filter , puis on passe le résultat de ce filter comme premier argument du select .
Le rĂ©sultat final est le mĂȘme avec les deux syntaxes, mais avec le pipe lâordre des opĂ©rations correspond Ă
lâordre naturel de leur exĂ©cution, et on nâa pas eu besoin de crĂ©er dâobjet intermĂ©diaire.
Si la liste des fonctions enchaßnées est longue, on peut les répartir sur plusieurs lignes à condition que
lâopĂ©rateur %>% soit en fin de ligne :
4. Le pipe a Ă©tĂ© introduit Ă lâorigine par lâextension magrittr, et repris par dplyr
â 249 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
NOTE
Ăvidemment, il est naturel de vouloir rĂ©cupĂ©rer le rĂ©sultat final dâun pipeline pour le stocker dans un objet.
Par exemple, on peut stocker le résultat du pipeline ci-dessus dans un nouveau tableau delay_la de la
maniĂšre suivante :
Dans ce cas, delay_la contiendra le tableau final, obtenu aprĂšs application des trois instructions
filter , select et arrange .
Cette notation nâest pas forcĂ©ment trĂšs intuitive au dĂ©part. Il faut bien comprendre que câest le rĂ©sultat
final, une fois application de toutes les opĂ©rations du pipeline, qui est renvoyĂ© et stockĂ© dans lâobjet en
début de ligne.
est équivalente à :
R> delay_la <- (flights %>% filter(dest == "LAX") %>% select(dep_delay, arr_dela
y))
NOTE
Lâutilisation du pipe nâest pas obligatoire, mais elle rend les scripts plus lisibles et plus rapides Ă saisir.
On lâutilisera donc dans ce qui suit.
â 250 â
Manipuler les données avec dplyr
Opérations groupées
group_by
Un élément trÚs important de dplyr est la fonction group_by . Elle permet de définir des groupes de
lignes Ă partir des valeurs dâune ou plusieurs colonnes. Par exemple, on peut grouper les vols selon leur
mois :
Par dĂ©faut ceci ne fait rien de visible, Ă part lâapparition dâune mention Groups dans lâaffichage du rĂ©sultat.
Mais Ă partir du moment oĂč des groupes ont Ă©tĂ© dĂ©finis, les verbes comme slice , mutate ou
summarise vont en tenir compte lors de leurs opérations.
Par exemple, si on applique slice à un tableau préalablement groupé, il va sélectionner les lignes aux
positions indiquées pour chaque groupe. Ainsi la commande suivante affiche le premier vol de chaque mois,
selon leur ordre dâapparition dans le tableau :
Idem pour mutate : les opérations appliquées lors du calcul des valeurs des nouvelles colonnes sont
aplliquĂ©e groupe de lignes par groupe de lignes. Dans lâexemple suivant, on ajoute une nouvelle colonne
qui contient le retard moyen du mois correspondant :
Ceci peut permettre, par exemple, de déterminer si un retard donné est supérieur ou inférieur au retard
moyen du mois en cours.
group_by peut aussi ĂȘtre utile avec filter , par exemple pour sĂ©lectionner les vols avec le retard au
départ le plus important pour chaque mois :
â 251 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
I M P O R TA N T
Attention : la clause group_by marche pour les verbes déjà vus précédemment, sauf pour arrange ,
qui par défaut trie la table sans tenir compte des groupes. Pour obtenir un tri par groupe, il faut lui
ajouter lâargument .by_group = TRUE .
summarise et count
summarise permet dâagrĂ©ger les lignes du tableau en effectuant une opĂ©ration ârĂ©sumĂ©eâ sur une ou
plusieurs colonnes. Par exemple, si on souhaite connaĂźtre les retards moyens au dĂ©part et Ă lâarrivĂ©e pour
lâensemble des vols du tableau flights :
Cette fonction est en gĂ©nĂ©ral utilisĂ©e avec group_by , puisquâelle permet du coup dâagrĂ©ger et rĂ©sumer
les lignes du tableau groupe par groupe. Si on souhaite calculer le délai maximum, le délai minimum et le
délai moyen au départ pour chaque mois, on pourra faire :
â 252 â
Manipuler les données avec dplyr
summarise dispose dâun opĂ©rateur spĂ©cial, n() , qui retourne le nombre de lignes du groupe. Ainsi si on
veut le nombre de vols par destination, on peut utiliser :
Ă noter que quand on veut compter le nombre de lignes par groupe, on peut utiliser directement la
fonction count . Ainsi le code suivant est identique au précédent :
On peut utiliser plusieurs opĂ©rations de groupage dans le mĂȘme pipeline. Ainsi, si on souhaite dĂ©terminer
le couple origine/destination ayant le plus grand nombre de vols selon le mois de lâannĂ©e, on devra
procéder en deux étapes :
âą dâabord grouper selon mois, origine et destination pour calculer le nombre de vols
⹠puis grouper uniquement selon le mois pour sélectionner la ligne avec la valeur maximale.
â 253 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Lorsquâon effectue un group_by suivi dâun summarise , le tableau rĂ©sultat est automatiquement
dégroupé de la derniÚre variable de regroupement. Ainsi le tableau généré par le code suivant est groupé par
month et origin :
Cela peut permettre âdâenchaĂźnerâ les opĂ©rations groupĂ©es. Dans lâexemple suivant on calcule le
pourcentage des trajets pour chaque destination par rapport Ă tous les trajets du mois :
On peut Ă tout moment âdĂ©grouperâ un tableau Ă lâaide de ungroup . Ce serait par exemple nĂ©cessaire,
dans lâexemple prĂ©cĂ©dent, si on voulait calculer le pourcentage sur le nombre total de vols plutĂŽt que sur
le nombre de vols par mois :
â 254 â
Manipuler les données avec dplyr
sample_n et sample_frac
sample_n et sample_frac permettent de sélectionner un nombre de lignes ou une fraction des lignes
dâun tableau alĂ©atoirement. Ainsi si on veut choisir 5 lignes au hasard dans le tableau airports :
Ces fonctions sont utiles notamment pour faire de âlâĂ©chantillonnageâ en tirant au hasard un certain
nombre dâobservations du tableau.
lead et lag
lead et lag permettent de dĂ©caler les observations dâune variable dâun cran vers lâarriĂšre (pour lead )
ou vers lâavant (pour lag ).
â 255 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> lead(1:5)
[1] 2 3 4 5 NA
R> lag(1:5)
[1] NA 1 2 3 4
Ceci peut ĂȘtre utile pour des donnĂ©es de type âsĂ©ries temporellesâ. Par exemple, on peut facilement
calculer lâĂ©cart entre le retard au dĂ©part de chaque vol et celui du vol prĂ©cĂ©dent :
tally
tally est une fonction qui permet de compter le nombre dâobservations dâun groupe :
Lors de son premier appel, elle sera Ă©quivalente Ă un summarise(n = n()) ou Ă un count() . LĂ oĂč la
fonction est intelligente, câest que si on lâappelle plusieurs fois successivement, elle prendra en compte
lâexistence dâun n dĂ©jĂ calculĂ© et effectuera automatiquement un summarise(n = sum(n)) :
distinct
distinct filtre les lignes du tableau pour ne conserver que les lignes distinctes, en supprimant toutes
les lignes en double.
â 256 â
Manipuler les données avec dplyr
On peut lui spécifier une liste de variables : dans ce cas, pour toutes les observations ayant des valeurs
identiques pour les variables en question, distinct ne conservera que la premiĂšre dâentre elles.
Lâoption .keep_all permet, dans lâopĂ©ration prĂ©cĂ©dente, de conserver lâensemble des colonnes du
tableau :
Fonctions avancées
On pourra consulter le chapitre dplyr avancĂ© de lâexcellente Introduction Ă R et au tidyverse de Julien
Barnier ([Link]
Julien Barnier aborde notamment les fonctions across pour appliquer une transformation Ă plusieurs
colonnes, rowwise et c_across pour appliquer une transformation ligne Ă ligne, rename_with pour
renommer les colonnes Ă lâaide dâune fonction, ou encore la syntaxe abrĂ©gĂ©e permettant de dĂ©finir des
fonctions anonymes.
Ressources
Toutes les ressources ci-dessous sont en anglaisâŠ
Le livre R for data science, librement accessible en ligne, contient plusieurs chapitres trĂšs complets sur la
manipulation des données, notamment :
Le site de lâextension comprend une liste des fonctions et les pages dâaide associĂ©es, mais aussi une
introduction au package et plusieurs articles dont un spécifiquement sur les jointures.
Une âantisĂšcheâ trĂšs synthĂ©tique est Ă©galement accessible depuis RStudio, en allant dans le menu Help
puis Cheatsheets et Data Transformation with dplyr.
â 257 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
dplyr et [Link]
Pour ceux travaillant Ă©galement avec lâextension [Link], il est possible de concilier tibble et [Link]
avec lâextension dtplyr. Cette extension a connu une profonde Ă©volution en 2019. Pour plus
dâinformations, voir [Link] Pour dĂ©crouvrir [Link], voir le chapitre dĂ©diĂ©,
page 259.
dplyr et survey
Lâextension srvyr vise Ă permettre dâutiliser les verbes de dplyr avec les plans dâĂ©chantillonnage complexe
définis avec survey. Le fonctionnement de cette extension est expliqué dans une vignette dédiée :
[Link]
â 258 â
Manipulations avancées
avec [Link]
Convertir un [Link] en [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
setDT et setDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
dplyr et [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
La syntaxe des crochets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Sélectionner des observations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Sélectionner des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Grouper les résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Ajouter / Modifier / Supprimer une variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Enchaßner les opérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Réorganiser un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Ressources en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Lâextension [Link] permets dâĂ©tendre les tableaux de donnĂ©es. Elle modifie radicalement la syntaxe
des crochets, permettant un code plus court et surtout plus puissant. Par ailleurs, elle est particuliĂšrement
rapide pour opĂ©rer des opĂ©rations sur les donnĂ©es et permets dâeffectuer des opĂ©rations par assignation
directe sans avoir à copier les objets en mémoire. Autrement dit, elle est particuliÚrement utile lorsque
lâon travaille sur des gros fichiers de donnĂ©es.
Certes, lâapprentissage de cette nouvelle syntaxe peut faire peur au dĂ©but, mais câest un gain tellement
notable une fois quâon la maĂźtrise, quâil est difficile de revenir en arriĂšre.
Pour un tutoriel (en anglais et en ligne) écrit par les développeurs de [Link], voir
[Link] On pourra aussi se référer
au site officiel et ses différentes vignettes (en anglais) : [Link]
â 259 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> library([Link])
iris2 <- [Link](iris)
class(iris2)
Comme on le voit, cela ajoute plusieurs classes additionnelles au tableau de données, celui-ci restant
malgré tout toujours un [Link]. Cependant, la syntaxe des crochets simples [] change radicalement,
tandis que les crochets doubles [[]] restent inchangĂ©s. Par contre, comme il sâagit toujours dâun tableau
de donnĂ©es classique, on pourra lâutiliser avec les fonctions des autres extensions de R. Si jamais vous
rencontriez un problÚme, il est toujours possible de reconvertir en tableau de données classique avec
setDF (voir ci-dessous).
setDT et setDF
Lors de lâutilisation de [Link] , le tableau de donnĂ©es original a dâabord Ă©tĂ© copiĂ© en mĂ©moire,
converti puis il a fallu le sauvegarder dans un objet avec <- . Lorsquâon lâon manipule de gros tableaux,
cela est gourmand en ressources systĂšme et prend du temps.
Câest pour cela que [Link] fournie plusieurs fonctions (commençant parle prĂ©fixe set ) qui modifient
directement lâobjet sĂ©lectionnĂ© en mĂ©moire, ce quâon appelle «modification par assignation». Ce type de
fonction est beaucoup plus rapide et efficace en termes de ressources systĂšme. On notera Ă©galement quâil
est inutile de stocker le rĂ©sultats dans un objet puisque lâobjet a Ă©tĂ© modifiĂ© directement en mĂ©moire.
setDT converti un tableaux de donnĂ©es en [Link] tandis que setDF fait lâopĂ©ration opposĂ©e.
R> setDT(iris)
class(iris)
R> setDF(iris)
class(iris)
[1] "[Link]"
â 260 â
Manipulations avancées avec [Link]
dplyr et [Link]
Pour ceux travaillant également avec les extension dplyr et tibble, il est possible de concilier tibble et
[Link] avec lâextension dtplyr. Cette extension a connu une profonde Ă©volution en 2019. Pour plus
dâinformations, voir [Link]
On notera que les noms indiquer entre les crochets sont Ă©valuĂ©s en fonction du contexte, en lâoccurence la
liste des variables de lâobjet considĂ©rĂ©. Ainsi, les noms des variables peuvent ĂȘtre indiquĂ©s tels quels, sans
utilisation du symbole $ ni des guillemets.
I M P O R TA N T
Une diffĂ©rence de taille : lorsquâil y a des observations pour lesquelles la condition indiquĂ©e en i
renvoie NA , elles ne sont pas sélectionnées par [Link] tandis que, pour un [Link] classique
cela renvoie des lignes manquantes.
â 261 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8
[14] 4.3 5.8 5.7 5.4 5.1 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0
[27] 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0 5.5 4.9 4.4
[40] 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0 6.4
[53] 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6
[66] 6.7 5.6 5.8 6.2 5.6 5.9 6.1 6.3 6.1 6.4 6.6 6.8 6.7
[79] 6.0 5.7 5.5 5.5 5.8 6.0 5.4 6.0 6.7 6.3 5.6 5.5 5.5
[92] 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8 7.1 6.3
[105] 6.5 7.6 4.9 7.3 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5
[118] 7.7 7.7 6.0 6.9 5.6 7.7 6.3 6.7 7.2 6.2 6.1 6.4 7.2
[131] 7.4 7.9 6.4 6.3 6.1 7.7 6.3 6.4 6.0 6.9 6.7 6.9 5.8
[144] 6.8 6.7 6.7 6.3 6.5 6.2 5.9
Pour sélectionner plusieurs variables, on fournira une liste définie avec list (et non un vecteur défini
avec c ).
[Link] fourni un raccourci pour Ă©crire une liste : .() . A lâintĂ©rieur des crochets (mais pas en dehors),
.() sera compris comme list() .
Il est possible de renommer une variable Ă la volĂ©e et mĂȘme dâen calculer dâautres.
Seul le retour est ici affectĂ©. Cela nâimpacte pas le tableau dâorigine. Nous verrons plus loin comment crĂ©er
/ modifier une variable.
Attention : on ne peut pas directement sélectionner une variable par sa position ou en indiquant une
chaßne de caractÚres. En effet, une valeur numérique ou textuelle est comprise comme une constante.
â 262 â
Manipulations avancées avec [Link]
Cela devient particuliĂšrement intĂ©ressant en calculant ces mĂȘmes valeurs par sous-groupe, grace au
troisiĂšme paramĂštre : by .
On peut également combiner := avec une sélection sur les observations en i pour ne modifier que
certaines observations. De mĂȘme, le recours Ă by permets des calculs par groupe.
R> iris2
â 263 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Réorganiser un tableau
Lâextension [Link] fournie Ă©galement deux fonctions, melt et dcast , dĂ©diĂ©e Ă la rĂ©organisation dâun
tableau de données (respectivement wide-to-long reshaping et long-to-wide reshaping).
Pour plus de dĂ©tails, voir la vignette dĂ©diĂ©e sur le site de lâextension : [Link]
[Link]/articles/[Link]
Ressources en ligne
âą Une introduction Ă [Link] par Lino Galiana : [Link]
datatable-intro/
âą Un cours sur [Link] : [Link]
â 264 â
Tris
Fonctions R de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Extension dplyr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Extension [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
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.
R> library(questionr)
data(hdv2003)
d <- hdv2003
Fonctions R de base
La fonction sort permet de trier les Ă©lĂ©ments dâun vecteur.
[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.
â 265 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
[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âŠ
R> head(order(d$age))
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 :
Alors on a triĂ© les lignes de d par ordre dâĂąge croissant ! Et si on fait un petit :
R> head([Link], 3)
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 :
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 :
NOTE
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 ).
â 266 â
Tris
Extension dplyr
On aura simplement recours Ă la fonction arrange . Un tri par ordre dĂ©croissant sâindique avec la
fonction desc .
R> library(dplyr)
tbl <- as_tibble(hdv2003)
tbl <- tbl %>% arrange(sexe, desc(age))
Extension [Link]
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 - .
R> library([Link])
dt <- [Link](hdv2003)
# Option 1
dt <- dt[order(sexe, -age)]
# Option 2
setorder(dt, sexe, -age)
â 267 â
Sous-ensembles
Par indexation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Fonction subset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Fonction tapply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Extension dplyr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Extension [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
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.
R> library(questionr)
data(hdv2003)
d <- hdv2003
Par indexation
La premiĂšre maniĂšre de construire des sous-populations est dâutiliser lâindexation par conditions. On peut
ainsi facilement sélectionner une partie des observations suivant un ou plusieurs critÚres et placer le
résultat dans un nouveau tableau de données.
Homme Femme
899 1101
â 269 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> dim(dh)
[1] 899 20
R> dim(df)
[1] 1101 20
[1] 86 20
Si on utilise directement lâindexation, il convient cependant dâĂȘtre extrĂȘmement prudent avec les valeurs
manquantes. Comme indiquĂ© prĂ©cĂ©demment, la prĂ©sence dâune valeur manquante dans une condition fait
que celle-ci est Ă©valuĂ©e en NA et quâau final la ligne correspondante est conservĂ©e par lâindexation :
R> summary(d$[Link])
[1] 1432 20
Comme on le voit, ici [Link] contient les individus ayant la modalité Satisfaction mais aussi ceux
ayant une valeur manquante NA . Câest pourquoi il faut toujours soit vĂ©rifier au prĂ©alable quâon nâa pas
de valeurs manquantes dans les variables de la condition, soit exclure explicitement les NA de la maniĂšre
suivante :
â 270 â
Sous-ensembles
[1] 480 20
Câest notamment pour cette raison quâon prĂ©fĂšrera le plus souvent utiliser la fonction subset .
Fonction subset
La fonction subset permet dâextraire des sous-populations de maniĂšre plus simple et un peu plus
intuitive que lâindexation directe.
Lâutilisation de subset prĂ©sente plusieurs avantages. Le premier est dâĂ©conomiser quelques touches. On
nâest en effet pas obligĂ© de saisir le nom du tableau de donnĂ©es dans la condition sur les lignes. Ainsi les
deux commandes suivantes sont équivalentes :
Le second avantage est que subset sâoccupe du problĂšme des valeurs manquantes Ă©voquĂ©es
prĂ©cĂ©demment et les exclut de lui-mĂȘme, contrairement au comportement par dĂ©faut :
R> summary(d$[Link])
â 271 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
[1] 1432 20
[1] 480 20
[1] 480 20
Enfin, lâutilisation de lâargument select est simplifiĂ© pour lâexpression de condition sur les colonnes.
On peut ainsi spĂ©cifier les noms de variable sans guillemets et leur appliquer directement lâopĂ©rateur
dâexclusion - :
Fonction tapply
NOTE
Cette section documente une fonction qui peut ĂȘtre trĂšs utile, mais pas forcĂ©ment indispensable au
départ.
La fonction tapply nâest quâindirectement liĂ©e Ă la notion de sous-population, mais peut permettre
dâĂ©viter dâavoir Ă crĂ©er ces sous-populations dans certains cas.
Son fonctionnement est assez simple, mais pas forcément intuitif. La fonction prend trois arguments :
un vecteur, un facteur et une fonction. Elle applique ensuite la fonction aux éléments du vecteur
correspondant Ă un mĂȘme niveau du facteur. Vite, un exemple !
â 272 â
Sous-ensembles
Homme Femme
48.16 48.15
Quâest-ce que ça signifie ? Ici tapply a sĂ©lectionnĂ© toutes les observations correspondant à « Homme »,
puis appliquĂ© la fonction mean aux valeurs de age correspondantes. Puis elle a fait de mĂȘme pour les
observations correspondant à « Femme ». On a donc ici la moyenne dâĂąge chez les hommes et chez les
femmes.
$Homme
Frequency table
$Femme
Frequency table
Les arguments supplémentaires fournis à tapply sont en fait fournis directement à la fonction appelée.
â 273 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
$Homme
Frequency table
$Femme
Frequency table
â 274 â
Sous-ensembles
NOTE
La fonction by est un équivalent (pour les tableaux de données) de tapply . La présentation des
résultats diffÚre légÚrement.
Homme Femme
48.16 48.15
d$sexe: Homme
[1] 48.16
---------------------------------------------
d$sexe: Femme
[1] 48.15
Extension dplyr
On utilisera tout simplement la fonction filter .
R> library(dplyr)
tbl <- as_tibble(hdv2003)
hommes_jeunes <- tbl %>% filter(sexe == "Homme", age < 30)
Extension [Link]
Il suffit dâindiquer la condition entre crochets.
â 275 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> library([Link])
dt <- [Link](hdv2003)
hommes_jeunes <- dt[sexe == "Hommes" & age < 30]
R> hommes_jeunes <- subset(dt, sexe == "Hommes" & age < 30)
â 276 â
Fusion de tables
La fonction merge et les jointures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Jointures avec dplyr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Clés implicites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Clés explicites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Types de jointures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Jointures avec [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Ajouter des observations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
WEBIN-R
Ce chapitre est évoqué dans le webin-R #04 (manipuler les données avec dplyr) sur YouTube.
Lorsquâon traite de grosses enquĂȘtes, notamment les enquĂȘtes de lâINSEE, on a souvent Ă gĂ©rer des
données réparties dans plusieurs tables, soit du fait de la construction du questionnaire, soit du fait de
contraintes techniques (fichiers dbf ou Excel limités à 256 colonnes, par exemple).
Cela arrive Ă©galement lorsque lâon traitre de donnĂ©es dâune enquĂȘtes rĂ©alisĂ©e Ă diffĂ©rents niveaux (par
exemple, un questionnaire ménage et un questionnaire individu).
Nous allons simuler artificiellement une telle situation en crĂ©ant deux tables Ă partir de lâextrait de
lâenquĂȘte Histoire de vie :
â 277 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> library(questionr)
data(hdv2003)
d <- hdv2003
dim(d)
[1] 2000 20
[1] 2000 3
[1] 2000 2
Intuitivement, cela paraĂźt simple. Il suffit de « coller » d2 Ă la droite de d1 , comme dans lâexemple suivant.
id v1 v2 id v3 id v1 v2 v3
1 H 12 1 rouge 1 H 12 rouge
+ =
2 H 17 2 bleu 2 H 17 bleu
3 F 41 3 bleu 3 F 41 bleu
4 F 9 4 rouge 4 F 9 rouge
⊠⊠⊠⊠⊠⊠⊠⊠âŠ
Cela semble fonctionner. La fonction qui permet dâeffectuer cette opĂ©ration sous R sâappelle cbind , elle
« colle » des tableaux cÎte à cÎte en regroupant leurs colonnes.
Ă part le fait quâon a une colonne id en double, le rĂ©sultat semble satisfaisant. Ă premiĂšre vue seulement.
Imaginons maintenant que nous avons travaillé sur d1 et d2 , et que nous avons ordonné les lignes de
d1 selon lâĂąge des enquĂȘtĂ©s :
â 278 â
Fusion de tables
Que constate-t-on ? La présence de la variable id en double nous permet de voir que les identifiants
ne coïncident plus ! En regroupant nos colonnes nous avons donc attribué à des individus les réponses
dâautres individus.
La commande cbind ne peut en effet fonctionner que si les deux tableaux ont exactement le mĂȘme
nombre de lignes, et dans le mĂȘme ordre, ce qui nâest pas le cas ici.
I M P O R TA N T
Pour éviter toute erreur, il est préférable de ne jamais utiliser cbind ou son équivalent bind_cols
fournis par dplyr.
On va donc ĂȘtre obligĂ© de procĂ©der Ă une fusion des deux tableaux, qui va permettre de rendre Ă chaque
ligne ce qui lui appartient. Pour cela nous avons besoin dâun identifiant qui permet dâidentifier chaque
ligne de maniĂšre unique et qui doit ĂȘtre prĂ©sent dans tous les tableaux. Dans notre cas, câest plutĂŽt rapide,
il sâagit de la variable id.
Une fois lâidentifiant identifiĂ©1, on peut utiliser la commande merge . Celle-ci va fusionner les deux
tableaux en supprimant les colonnes en double et en regroupant les lignes selon leurs identifiants :
Ici lâutilisation de la fonction merge est plutĂŽt simple car nous sommes dans le cas de figure idĂ©al : les
lignes correspondent parfaitement et lâidentifiant est clairement identifiĂ©. Parfois les choses peuvent ĂȘtre
un peu plus compliquées :
âą parfois les identifiants nâont pas le mĂȘme nom dans les deux tableaux. On peut alors les spĂ©cifier
par les options by.x et by.y ;
âą parfois les deux tableaux comportent des colonnes (hors identifiants) ayant le mĂȘme nom.
merge conserve dans ce cas ces deux colonnes mais les renomme en les suffixant par .x pour
celles provenant du premier tableau et .y pour celles du second ;
âą parfois on nâa pas dâidentifiant unique préétabli, mais on en construit un Ă partir de plusieurs
â 279 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Une subtilitĂ© supplĂ©mentaire intervient lorsque les deux tableaux fusionnĂ©s nâont pas exactement les
mĂȘmes lignes. Par dĂ©faut, merge ne conserve que les lignes prĂ©sentes dans les deux tableaux :
id v1 id v2
id v1 v2
+ =
1 H 1 10
1 H 10
2 H 2 15
2 H 15
3 F 5 31
Ainsi, all.x = TRUE indique de conserver toutes les lignes du premier tableau. Dans ce cas merge
donne une valeur NA pour ces lignes aux colonnes provenant du second tableau. Ce qui donnerait :
id v1 id v2 id v1 v2
+ =
1 H 1 10 1 H 10
2 H 2 15 2 H 15
3 F 5 31 3 F NA
Lâoption all.y = TRUE fait la mĂȘme chose en conservant toutes les lignes du second tableau.
id v1 id v2 id v1 v2
+ =
1 H 1 10 1 H 10
2 H 2 15 2 H 15
3 F 5 31 5 NA 31
Enfin, on peut décider de conserver toutes les lignes des deux tableaux en utilisant à la fois
all.x = TRUE et all.y = TRUE , ce qui donne :
â 280 â
Fusion de tables
id v1 v2
id v1 id v2
1 H 10
+ =
1 H 1 10
2 H 15
2 H 2 15
3 F NA
3 F 5 31
5 NA 31
Parfois, lâun des identifiants est prĂ©sent Ă plusieurs reprises dans lâun des tableaux (par exemple lorsque
lâune des tables est un ensemble de mĂ©nages et que lâautre dĂ©crit lâensemble des individus de ces
mĂ©nages). Dans ce cas les lignes de lâautre table sont dupliquĂ©es autant de fois que nĂ©cessaires :
id v2 id v1 v2
id v1 1 10 1 H 10
+ =
1 H 1 18 1 H 18
2 H 1 21 1 H 21
3 F 2 15 2 H 15
3 42 3 F 42
dplyr propose différentes fonctions permettant de travailler avec des données structurées de cette
maniĂšre.
â 281 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> library(tidyverse)
library(nycflights13)
data(flights)
data(airports)
data(airlines)
Clés implicites
TrÚs souvent, les données relatives à une analyse sont réparties dans plusieurs tables différentes. Dans
notre exemple, on peut voir que la table flights contient seulement le code de la compagnie aérienne
du vol dans la variable carrier :
Et que par ailleurs la table airlines contient une information supplémentaire relative à ces
compagnies, Ă savoir le nom complet.
R> airlines
Il est donc naturel de vouloir associer les deux, en lâoccurrence pour ajouter les noms complets des
compagnies Ă la table flights . Dans ce cas on va faire une jointure : les lignes dâune table seront
associĂ©es Ă une autre en se basant non pas sur leur position, mais sur les valeurs dâune ou plusieurs
colonnes. Ces colonnes sont appelées des clés.
On voit que la table rĂ©sultat est bien la fusion des deux tables dâorigine selon les valeurs des deux colonnes
clés carrier. On est parti de la table flights , et pour chaque ligne on a ajouté les colonnes de
airlines pour lesquelles la valeur de carrier est la mĂȘme. On a donc bien une nouvelle colonne name
dans notre table résultat, avec le nom complet de la compagnie aérienne.
â 282 â
Fusion de tables
NOTE
Ă noter quâon peut tout Ă fait utiliser le pipe avec les fonctions de jointure :
Nous sommes ici dans le cas le plus simple concernant les clés de jointure : les deux clés sont uniques et
portent le mĂȘme nom dans les deux tables. Par dĂ©faut, si on ne lui spĂ©cifie pas explicitement les clĂ©s, dplyr
fusionne en utilisant lâensemble des colonnes communes aux deux tables. On peut dâailleurs voir dans cet
exemple quâun message a Ă©tĂ© affichĂ© prĂ©cisant que la jointure sâest faite sur la variable carrier.
Clés explicites
La table airports , elle, contient des informations supplémentaires sur les aéroports : nom complet,
altitude, position géographique, etc. Chaque aéroport est identifié par un code contenu dans la colonne
faa.
Si on regarde la table flights , on voit que le code dâidentification des aĂ©roports apparaĂźt Ă deux endroits
diffĂ©rents : pour lâaĂ©roport de dĂ©part dans la colonne origin, et pour celui dâarrivĂ©e dans la colonne
dest. On a donc deux clés de jointures possibles, et qui portent un nom différent de la clé de airports .
On va commencer par fusionner les donnĂ©es concernant lâaĂ©roport de dĂ©part. Pour simplifier lâaffichage
des rĂ©sultats, on va se contenter dâun sous-ensemble des deux tables :
Si on se contente dâun left_join comme Ă lâĂ©tape prĂ©cĂ©dente, on obtient un message dâerreur car
aucune colonne commune ne peut ĂȘtre identifiĂ©e comme clĂ© de jointure :
Error in `left_join()`:
! `by` must be supplied when `x` and `y` have no
common variables.
âč Use `cross_join()` to perform a cross-join.
On doit donc spĂ©cifier explicitement les clĂ©s avec lâargument by de left_join . Ici la clĂ© est nommĂ©e
origin dans la premiĂšre table, et faa dans la seconde. La syntaxe est donc la suivante :
â 283 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
On constate que les deux nouvelles colonnes name et alt contiennent bien les donnĂ©es correspondant Ă
lâaĂ©roport de dĂ©part.
Supposons quâon souhaite maintenant fusionner Ă nouveau les informations de la table airports , mais
cette fois pour les aĂ©roports dâarrivĂ©e de notre nouvelle table flights_ex . Les deux clĂ©s sont donc
désormais dest dans la premiÚre table, et faa dans la deuxiÚme. La syntaxe est donc la suivante :
Cela fonctionne, les informations de lâaĂ©roport dâarrivĂ©e ont bien Ă©tĂ© ajoutĂ©es, mais on constate que les
colonnes ont été renommées. En effet, ici les deux tables fusionnées contenaient toutes les deux des
colonnes name et alt. Comme on ne peut pas avoir deux colonnes avec le mĂȘme nom dans un tableau,
dplyr a renommé les colonnes de la premiÚre table en name.x et alt.x , et celles de la deuxiÚme en
name.y et alt.y .
Câest pratique, mais pas forcĂ©ment trĂšs parlant. On pourrait renommer manuellement les colonnes pour
avoir des intitulĂ©s plus explicites avec rename , mais on peut aussi utiliser lâargument suffix de
left_join , qui permet dâindiquer les suffixes Ă ajouter aux colonnes. Ainsi, on peut faire :
Types de jointures
JusquâĂ prĂ©sent nous avons utilisĂ© la fonction left_join , mais il existe plusieurs types de jointures.
â 284 â
Fusion de tables
nom voiture
Sylvie Twingo
Sylvie Ferrari
Monique Scenic
Gunter Lada
Rayan Twingo
Rayan Clio
voiture vitesse
Twingo 140
Ferrari 280
Clio 160
Lada 85
208 160
left_join
â 285 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Monique Scenic NA
Gunter Lada 85
On voit que chaque ligne de personnes est bien prĂ©sente, et quâon lui a ajoutĂ© une ligne de voitures
correspondante si elle existe. Dans le cas du Scenic , il nây a avait pas de ligne dans voitures , donc
vitesse a été mise à NA . Dans le cas de 208 , présente dans voitures mais pas dans personnes , la
ligne nâapparaĂźt pas.
â 286 â
Fusion de tables
Lada 85 Gunter
208 160 NA
La ligne 208 est lĂ , mais nom est Ă NA . Par contre Monique est absente. Et on remarquera que la ligne
Twingo , prĂ©sente deux fois dans personnes , a Ă©tĂ© dupliquĂ©e pour ĂȘtre associĂ©e aux deux lignes de
données de Sylvie et Rayan .
En résumé, quand on fait un left_join(x, y) , toutes les lignes de x sont présentes, et dupliquées
si nécessaire quand elles apparaissent plusieurs fois dans y . Les lignes de y non présentes dans x
disparaissent. Les lignes de x non présentes dans y se voient attribuer des NA pour les nouvelles
colonnes.
right_join
La jointure right_join est lâexacte symĂ©trique de left_join , câest-Ă dire que right_join(x, y)
est équivalent à left_join(x,y) :
â 287 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Gunter Lada 85
NA 208 160
inner_join
Dans le cas de inner_join , seules les lignes présentes à la fois dans x et y sont présentes (et si
nécessaire dupliquées) dans la table résultat :
Gunter Lada 85
Ici la ligne 208 est absente, ainsi que la ligne Monique , qui dans le cas dâun left_join avait Ă©tĂ©
conservĂ©e et sâĂ©tait vue attribuer une vitesse Ă NA .
full_join
Dans le cas de full_join , toutes les lignes de x et toutes les lignes de y sont conservées (avec des
NA ajoutĂ©s si nĂ©cessaire) mĂȘme si elles sont absentes de lâautre table :
â 288 â
Fusion de tables
Monique Scenic NA
Gunter Lada 85
NA 208 160
semi_join et anti_join
semi_join et anti_join sont des jointures filtrantes, câest-Ă -dire quâelles sĂ©lectionnent les lignes de x
sans ajouter les colonnes de y .
Ainsi, semi_join ne conservera que les lignes de x pour lesquelles une ligne de y existe également, et
supprimera les autres. Dans notre exemple, la ligne Monique est donc supprimée :
â 289 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
nom voiture
Sylvie Twingo
Sylvie Ferrari
Gunter Lada
Rayan Twingo
Rayan Clio
Un anti_join fait lâinverse, il ne conserve que les lignes de x absentes de y . Dans notre exemple, on
ne garde donc que la ligne Monique :
nom voiture
Monique Scenic
La fonction rbind , fournie nativement avec R pour ajouter des observations Ă un tableau, doit ĂȘtre
Ă©vitĂ©e car elle gĂ©nĂ©rera des rĂ©sultats non pertinents si les tableaux que lâon concatĂšnent nâont pas
exactement les mĂȘmes colonnes dans le mĂȘme ordre.
La fonction bind_rows de dplyr permet dâajouter des lignes Ă une table Ă partir dâune ou plusieurs autres
tables.
â 290 â
Fusion de tables
Lâexemple suivant (certes trĂšs artificiel) montre lâutilisation de bind_rows . On commence par crĂ©er trois
tableaux t1 , t2 et t3 :
t2
On remarquera que si des colonnes sont manquantes pour certaines tables, comme les colonnes lat et
lon de t3 , des NA sont automatiquement insérées.
De plus, peu importe lâordre des variables entre les diffĂ©rentes tables, bind_rows les rĂ©associera en
considĂ©rant que deux colonnes ayant le mĂȘme nom dans deux tableaux correspondent Ă la mĂȘme variable.
Il peut ĂȘtre utile, quand on concatĂšne des lignes, de garder une trace du tableau dâorigine de chacune
des lignes dans le tableau final. Câest possible grĂące Ă lâargument .id de bind_rows . On passe Ă cet
argument le nom dâune colonne qui contiendra lâindicateur dâorigine des lignes :
Par dĂ©faut la colonne .id ne contient quâun nombre, diffĂ©rent pour chaque tableau. On peut lui spĂ©cifier
des valeurs plus explicites en ânommantâ les tables dans bind_rows de la maniĂšre suivante :
â 291 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
NOTE
Une alternative Ă bind_rows est la fonction [Link] de lâextension plyr qui fonctionne de
maniĂšre similaire.
â 292 â
Gestion des dates
Si R fournit quelques fonctions natives pour la gestion des dates, lâextension lubridate est recommandĂ©e
pour tout travail un peu plus fin sur des dates. On pourra se référer :
âą au chapitre «Dates and Times» de lâouvrage R for Data Science de Garrett Grolemund et Hadley
Wickham (en anglais)
âą Ă la vignette officielle ([Link]
[Link], en anglais)
âą Ă ce tutoriel ([Link]
â 293 â
Fonctions Ă fenĂȘtre
I M P O R TA N T
WEBIN-R
Ce chapitre est évoqué dans le webin-R #04 (manipuler les données avec dplyr) sur YouTube.
Ces fonctions sont prĂ©sentĂ©es en dĂ©tail (en anglais) dans une vignette dĂ©diĂ©e de lâextension dplyr
([Link]
â 295 â
Manipuler du texte avec
stringr
Expressions réguliÚres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Concaténer des chaßnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Convertir en majuscules / minuscules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Découper des chaßnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Extraire des sous-chaĂźnes par position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Détecter des motifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Extraire des motifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Remplacer des motifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Modificateurs de motifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Insérer une variable dans une chaßne de caractÚres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
NOTE
La version originale de ce chapitre a été écrite par Julien Barnier dans le cadre de son Introduction à R
et au tidyverse.
Les fonctions de forcats vues prĂ©cĂ©demment permettent de modifier des modalitĂ©s dâune variables
qualitative globalement. Mais parfois on a besoin de manipuler le contenu mĂȘme du texte dâune variable
de type chaĂźne de caractĂšres : combiner, rechercher, remplacerâŠ
On va utiliser ici les fonctions de lâextension stringr. Celle-ci fait partie du coeur du tidyverse, elle est donc
automatiquement chargée avec :
â 297 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> library(tidyverse)
NOTE
stringr est en fait une interface simplifiĂ©e aux fonctions dâune autre extension, stringi. Si les fonctions
de stringr ne sont pas suffisantes ou si on manipule beaucoup de chaßnes de caractÚres, ne pas hésiter
Ă se reporter Ă la documentation de stringi.
Expressions réguliÚres
Les fonctions présentées ci-dessous sont pour la plupart prévues pour fonctionner avec des expressions
réguliÚres. Celles-ci constituent un mini-langage, qui peut paraßtre assez cryptique, mais qui est trÚs
puissant pour spécifier des motifs de chaßnes de caractÚres.
Elles permettent par exemple de sĂ©lectionner le dernier mot avant la fin dâune chaĂźne, lâensemble des
suites alphanumériques commençant par une majuscule, des nombres de 3 ou 4 chiffres situés en début
de chaĂźne, et beaucoup beaucoup dâautres choses encore bien plus complexes.
Pour donner un exemple concret, lâexpression rĂ©guliĂšre suivante permet de dĂ©tecter une adresse de
courrier électronique1 :
â 298 â
Manipuler du texte avec stringr
[\w\d+.-_]+@[\w\d.-]+\.[a-zA-Z]{2,}
Par souci de simplicité, dans ce qui suit les exemples seront donnés autant que possible avec de simples
chaĂźnes, sans expression rĂ©guliĂšre. Mais si vous pensez manipuler des donnĂ©es textuelles, il peut ĂȘtre trĂšs
utile de sâintĂ©resser Ă cette syntaxe.
Par défaut, paste concatÚne en ajoutant un espace entre les différentes chaßnes. On peut spécifier un
autre séparateur avec son argument sep :
Il existe une variante, paste0 , qui concatÚne sans mettre de séparateur, et qui est légÚrement plus
rapide :
1. Il sâagit en fait dâune version trĂšs simplifiĂ©e, la «vĂ©ritable» expression permettant de tester si une adresse mail est
valide fait plus de 80 lignesâŠ
â 299 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
NOTE
Ă noter que paste et paste0 sont des fonctions R de base. LâĂ©quivalent pour stringr se nomme
str_c .
Parfois on cherche Ă concatĂ©ner les diffĂ©rents Ă©lĂ©ments dâun vecteur non pas avec ceux dâun autre
vecteur, comme on lâa fait prĂ©cĂ©demment, mais entre eux. Dans ce cas paste seule ne fera rien :
R> paste(d$ville)
Il faut lui ajouter un argument collapse , avec comme valeur la chaßne à utiliser pour concaténer les
éléments :
R> str_to_lower(d$nom)
R> str_to_upper(d$nom)
â 300 â
Manipuler du texte avec stringr
R> str_to_title(d$nom)
[[1]]
[1] "un" "deux" "trois"
On peut appliquer la fonction à un vecteur, dans ce cas le résultat sera une liste :
[[1]]
[1] "Mr" "Félicien" "Machin"
[[2]]
[1] "Mme" "Raymonde" "Bidule"
[[3]]
[1] "M." "Martial" "Truc"
[[4]]
[1] "Mme" "Huguette" "Chose"
â 301 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Si on souhaite créer de nouvelles colonnes dans un tableau de données en découpant une colonne de
type texte, on pourra utiliser la fonction separate de lâextension tidyr. Celle-ci est expliquĂ©e section
@ref(separate).
R> library(tidyr)
d %>% separate(nom, c("genre", "prenom", "nom"))
R> str_sub(d$ville, 1, 3)
str_detect renvoit un vecteur de valeurs logiques et peut donc ĂȘtre utilisĂ©e, par exemple, avec le verbe
filter de dplyr pour extraire des sous-populations.
â 302 â
Manipuler du texte avec stringr
Une variante, str_count , compte le nombre dâoccurrences dâune chaĂźne pour chaque Ă©lĂ©ment dâun
vecteur :
[1] 0 1 2 1
I M P O R TA N T
Attention, les fonctions de stringr étant prévues pour fonctionner avec des expressions réguliÚres,
certains caractĂšres nâauront pas le sens habituel dans la chaĂźne indiquant le motif Ă rechercher. Par
exemple, le . ne sera pas un point mais le symbole reprĂ©sentant «nâimporte quel caractĂšre».
La section sur les modificateurs de motifs explique comment utiliser des chaßne «classiques» au lieu
dâexpressions rĂ©guliĂšres.
On peut aussi utiliser str_subset pour ne garder dâun vecteur que les Ă©lĂ©ments correspondant au
motif :
Câest tout de suite plus intĂ©ressant si on utilise des expressions rĂ©guliĂšres. Par exemple la commande
suivante permet dâisoler les numĂ©ros de rue.
â 303 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
str_extract ne récupÚre que la premiÚre occurrence du motif. Si on veut toutes les extraire on peut
utiliser str_extract_all . Ainsi, si on veut extraire lâensemble des nombres prĂ©sents dans les adresses :
[[1]]
[1] "3"
[[2]]
[1] "47"
[[3]]
[1] "12" "17" "1961"
[[4]]
[1] "221"
NOTE
Si on veut faire de lâextraction de groupes dans des expressions rĂ©guliĂšres (identifiĂ©s avec des
parenthĂšses), on pourra utiliser str_match .
Ă noter que si on souhaite extraire des valeurs dâune colonne texte dâun tableau de donnĂ©es pour crĂ©er de
nouvelles variables, on pourra utiliser la fonction extract de lâextension tidyr, dĂ©crite plus haut.
Par exemple :
R> library(tidyr)
d %>% tidyr::extract(adresse, "type_rue", "^\\d+ (.*?) ", remove = FALSE)
Par exemple, on peut remplace les occurrence de âMrâ par âM.â dans les noms de notre tableau :
â 304 â
Manipuler du texte avec stringr
Modificateurs de motifs
Par défaut, les motifs passés aux fonctions comme str_detect , str_extract ou str_replace sont
des expressions réguliÚres classiques.
On peut spĂ©cifier quâun motif nâest pas une expression rĂ©guliĂšre mais une chaĂźne de caractĂšres normale en
lui appliquant la fonction fixed . Par exemple, si on veut compter le nombre de points dans les noms de
notre tableau, le paramétrage par défaut ne fonctionnera pas car dans une expression réguliÚre le . est
un symbole signifiant ânâimporte quel caractĂšreâ :
[1] 18 19 15 18
Il faut donc spécifier que notre point est bien un point avec fixed :
[1] 0 0 1 0
On peut aussi modifier le comportement des expressions rĂ©guliĂšres Ă lâaide de la fonction regex . On peut
ainsi rendre les motifs insensibles Ă la casse avec ignore_case :
â 305 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
On peut Ă©galement permettre aux regex dâĂȘtre multilignes avec lâoption multiline = TRUE , etc.
Sa variante str_glue_data est adaptĂ©e lorsque lâon travaille sur un tableau de donnĂ©es avec dplyr.
Ressources
Lâouvrage R for Data Science, accessible en ligne, contient un chapitre entier sur les chaĂźnes de caractĂšres
et les expressions réguliÚres (en anglais).
Le site officiel de stringr contient une liste des fonctions et les pages dâaide associĂ©es, ainsi quâun article
â 306 â
Manipuler du texte avec stringr
Pour des besoins plus pointus, on pourra aussi utiliser lâextension stringi sur laquelle est elle-mĂȘme basĂ©e
stringr.
â 307 â
Réorganiser ses données
avec tidyr
Tidy data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Trois rÚgles pour des données bien rangées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Les verbes de tidyr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
pivot_longer : rassembler des colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
pivot_wider : disperser des lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
separate : séparer une colonne en plusieurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
unite : regrouper plusieurs colonnes en une seule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
extract : crĂ©er de nouvelles colonnes Ă partir dâune colonne de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
complete : compléter des combinaisons de variables manquantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Fichiers volumineux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
NOTE
La version originale de ce chapitre a été écrite par Julien Barnier dans le cadre de son Introduction à R
et au tidyverse.
WEBIN-R
Ce chapitre est évoqué dans le webin-R #13 (exemples de graphiques avancés) sur YouTube.
Ce chapitre est évoqué dans le webin-R #17 (trajectoires de soins : un exemple de données
longitudinales) sur YouTube.
â 309 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Tidy data
Comme indiquĂ© dans lâintroduction au tidyverse, page 64, les extensions du tidyverse comme dplyr ou
ggplot2 partent du principe que les donnĂ©es sont âbien rangĂ©esâ sous forme de tidy data.
Prenons un exemple avec les données suivantes, qui indique la population de trois pays pour quatre
années différentes :
Imaginons quâon souhaite reprĂ©senter avec ggplot2 lâĂ©volution de la population pour chaque pays sous
forme de lignes : câest impossible avec les donnĂ©es sous ce format. On a besoin dâarranger le tableau de la
maniĂšre suivante :
â 310 â
Réorganiser ses données avec tidyr
Câest seulement avec les donnĂ©es dans ce format quâon peut rĂ©aliser le graphique :
â 311 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> ggplot(d) +
geom_line(aes(x = annee, y = population, color = country)) +
scale_x_continuous(breaks = unique(d$annee))
Câest la mĂȘme chose pour dplyr, par exemple si on voulait calculer la population minimale pour chaque
pays avec summarise :
R> d %>%
group_by(country) %>%
summarise(pop_min = min(population))
# A tibble: 3 Ă 2
country pop_min
<fct> <int>
1 Belgium 10045622
2 France 57374179
3 Germany 80597764
â 312 â
Réorganiser ses données avec tidyr
Ces rÚgles ne sont pas forcément trÚs intuitives. De plus, il y a une infinité de maniÚres pour un tableau de
donnĂ©es de ne pas ĂȘtre tidy.
Pourquoi ce tableau nâest pas tidy ? Parce que si on essaie dâidentifier les variables mesurĂ©es dans le
tableau, il y en a trois : le pays, lâannĂ©e et la population. Or elles ne correspondent pas aux colonnes de la
table. Câest le cas par contre pour la table transformĂ©e :
â 313 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
On peut remarquer quâen modifiant notre table pour satisfaire Ă la deuxiĂšme rĂšgle, on a aussi rĂ©glĂ© la
premiĂšre : chaque ligne correspond dĂ©sormais Ă une observation, en lâoccurrence lâobservation de trois
pays Ă plusieurs moments dans le temps. Dans notre table dâorigine, chaque ligne comportait en rĂ©alitĂ©
quatre observations différentes.
Autre exemple, gĂ©nĂ©rĂ© depuis le jeu de donnĂ©es nycflights13, permettant cette fois dâillustrer la troisiĂšme
rĂšgle :
â 314 â
Réorganiser ses données avec tidyr
Dans ce tableau on a bien une observation par ligne (un vol), et une variable par colonne. Mais on a
une âinfractionâ Ă la troisiĂšme rĂšgle, qui est que chaque valeur doit ĂȘtre prĂ©sente dans une unique case :
si on regarde la colonne name , on a en effet une duplication de lâinformation concernant le nom des
compagnies aĂ©riennes. Notre tableau mĂȘle en fait deux types dâobservations diffĂ©rents : des observations
sur les vols, et des observations sur les compagnies aériennes.
Pour âarrangerâ ce tableau, il faut sĂ©parer les deux types dâobservations en deux tables diffĂ©rentes :
2013 1 1 517 UA
2013 1 1 533 UA
2013 1 1 542 AA
2013 1 1 554 UA
2013 1 1 558 AA
2013 1 1 558 UA
2013 1 1 558 UA
2013 1 1 559 AA
â 315 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
On a dĂ©sormais deux tables distinctes, lâinformation nâest pas dupliquĂ©e, et on peut facilement faire une
jointure si on a besoin de rĂ©cupĂ©rer lâinformation dâune table dans une autre.
Dans ce tableau, une mĂȘme variable (la population) est rĂ©partie sur plusieurs colonnes, chacune
représentant une observation à un moment différent. On souhaite que la variable ne représente plus
quâune seule colonne, et que les observations soient rĂ©parties sur plusieurs lignes.
1. pivot_longer est une version plus récente et plus robuste de la fonction gather .
â 316 â
Réorganiser ses données avec tidyr
# A tibble: 12 Ă 3
country annee population
<fct> <chr> <int>
1 Belgium 2002 10311970
2 Belgium 2007 10392226
3 France 2002 59925035
4 France 2007 61083916
5 Germany 2002 82350671
6 Germany 2007 82400996
7 Italy 2002 57926999
8 Italy 2007 58147733
9 Spain 2002 40152517
10 Spain 2007 40448191
11 Switzerland 2002 7361757
12 Switzerland 2007 7554661
La fonction pivot_longer prend comme arguments la liste des colonnes Ă rassembler (on peut
également y utiliser les différentes fonctions de sélection de variables utilisables avec select , voir
select_helpers ), ainsi que deux arguments names_to et values_to :
âą names_to est le nom de la colonne qui va contenir les ânomsâ des colonnes originelles, câest-Ă -
dire les identifiants des différentes observations
âą values_to est le nom de la colonne qui va contenir la valeur des observations
Parfois il est plus rapide dâindiquer Ă pivot_longer les colonnes quâon ne souhaite pas rassembler. On
peut le faire avec la syntaxe suivante :
# A tibble: 12 Ă 3
country annee population
<fct> <chr> <int>
1 Belgium 2002 10311970
2 Belgium 2007 10392226
3 France 2002 59925035
4 France 2007 61083916
5 Germany 2002 82350671
6 Germany 2007 82400996
7 Italy 2002 57926999
8 Italy 2007 58147733
9 Spain 2002 40152517
â 317 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Ce tableau a le problÚme inverse du précédent : on a deux variables, lifeExp et pop qui, plutÎt que
dâĂȘtre rĂ©parties en deux colonnes, sont rĂ©parties entre plusieurs lignes.
On va donc utiliser pivot_wider pour «disperser» ces lignes dans deux colonnes différentes :
2. pivot_wider est une version plus récente et plus robuste de la fonction spread .
â 318 â
Réorganiser ses données avec tidyr
# A tibble: 6 Ă 5
country continent year lifeExp pop
<fct> <fct> <int> <dbl> <dbl>
1 Belgium Europe 2002 78.3 10311970
2 Belgium Europe 2007 79.4 10392226
3 France Europe 2002 79.6 59925035
4 France Europe 2007 80.7 61083916
5 Germany Europe 2002 78.7 82350671
6 Germany Europe 2007 79.4 82400996
⹠names_from indique la colonne contenant les noms des nouvelles variables à créer
âą values_from indique la colonne contenant les valeurs de ces variables
Il peut arriver que certaines variables soient absentes pour certaines observations. Dans ce cas
lâargument values_fill permet de spĂ©cifier la valeur Ă utiliser pour ces donnĂ©es manquantes (par
défaut, les valauers manquantes sont indiquées avec NA ).
â 319 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> d %>%
pivot_wider(names_from = variable, values_from = value)
# A tibble: 6 Ă 6
country continent year lifeExp pop density
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 Belgium Europe 2002 78.3 10311970 NA
2 Belgium Europe 2007 79.4 10392226 NA
3 France Europe 2002 79.6 59925035 94
4 France Europe 2007 80.7 61083916 NA
5 Germany Europe 2002 78.7 82350671 NA
6 Germany Europe 2007 79.4 82400996 NA
â 320 â
Réorganiser ses données avec tidyr
R> d %>%
pivot_wider(names_from = variable, values_from = value, values_fill = list(v
alue = 0))
# A tibble: 6 Ă 6
country continent year lifeExp pop density
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 Belgium Europe 2002 78.3 10311970 0
2 Belgium Europe 2007 79.4 10392226 0
3 France Europe 2002 79.6 59925035 94
4 France Europe 2007 80.7 61083916 0
5 Germany Europe 2002 78.7 82350671 0
6 Germany Europe 2007 79.4 82400996 0
eleve note
separate permet de séparer la colonne note en deux nouvelles colonnes note et note_sur :
# A tibble: 3 Ă 3
eleve note note_sur
<chr> <chr> <chr>
1 Félicien Machin 5 20
2 Raymonde Bidule 6 10
3 Martial Truc 87 100
separate prend deux arguments principaux, le nom de la colonne à séparer et un vecteur indiquant
les noms des nouvelles variables à créer. Par défaut separate «sépare» au niveau des caractÚres non-
alphanumérique (espace, symbole, etc.). On peut lui indiquer explicitement le caractÚre sur lequel séparer
avec lâargument sep :
â 321 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
# A tibble: 3 Ă 3
prenom nom note
<chr> <chr> <chr>
1 Félicien Machin 5/20
2 Raymonde Bidule 6/10
3 Martial Truc 87/100
On souhaite reconstruire une colonne code_insee qui indique le code INSEE de la commune, et qui
sâobtient en concatĂ©nant le code du dĂ©partement et celui de la commune. On peut utiliser unite pour
cela :
# A tibble: 6 Ă 3
code_insee commune pop_tot
<chr> <chr> <int>
1 01_004 Ambérieu-en-Bugey 14233
2 01_007 Ambronay 2437
3 01_014 Arbent 3440
4 01_024 Attignat 3110
5 01_025 Bùgé-la-Ville 3130
â 322 â
Réorganiser ses données avec tidyr
Le rĂ©sultat nâest pas idĂ©al : par dĂ©faut unite ajoute un caractĂšre _ entre les deux valeurs concatĂ©nĂ©es,
alors quâon ne veut aucun sĂ©parateur. De plus, on souhaite conserver nos deux colonnes dâorigine, qui
peuvent nous ĂȘtre utiles. On peut rĂ©soudre ces deux problĂšmes Ă lâaide des arguments sep et remove :
R> d %>%
unite(code_insee, code_departement, code_commune,
sep = "", remove = FALSE
)
# A tibble: 6 Ă 5
code_insee code_departement code_commune commune pop_tot
<chr> <chr> <chr> <chr> <int>
1 01004 01 004 Ambérieu⊠14233
2 01007 01 007 Ambronay 2437
3 01014 01 014 Arbent 3440
4 01024 01 024 Attignat 3110
5 01025 01 025 Bùgé-la-⊠3130
6 01027 01 027 Balan 2785
eleve note
On peut extraire les noms et prénoms dans deux nouvelles colonnes avec :
On passe donc Ă extract trois arguments : la colonne dâoĂč on doit extraire les valeurs, un vecteur
â 323 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
avec les noms des nouvelles colonnes à créer, et une expression réguliÚre comportant autant de groupes
(identifiés par des parenthÚses) que de nouvelles colonnes.
Par dĂ©faut la colonne dâorigine nâest pas conservĂ©e dans la table rĂ©sultat. On peut modifier ce
comportement avec lâargument remove = FALSE . Ainsi, le code suivant extrait les initiales du prĂ©nom et
du nom mais conserve la colonne dâorigine :
Alain Maths 16
Alain Français 9
Barnabé Maths 17
Chantal Français 11
Les Ă©lĂšves BarnabĂ© et Chantal nâont pas de notes dans toutes les matiĂšres. Supposons que câest parce
quâils Ă©taient absents et que leur note est en fait un 0. Si on veut calculer les moyennes des Ă©lĂšves, on doit
compléter ces notes manquantes.
La fonction complete est prévue pour ce cas de figure : elle permet de compléter des combinaisons
manquantes de valeurs de plusieurs colonnes.
On voit que les combinaisons manquante âBarnabĂ© - Françaisâ et âChantal - Mathsâ ont bien Ă©tĂ© ajoutĂ©es
par complete .
Par défaut les lignes insérées récupÚrent des valeurs manquantes NA pour les colonnes restantes. On
peut nĂ©anmoins choisir une autre valeur avec lâargument fill , qui prend la forme dâune liste nommĂ©e :
â 324 â
Réorganiser ses données avec tidyr
Parfois on ne souhaite pas inclure toutes les colonnes dans le calcul des combinaisons de valeurs. Par
exemple, supposons quâon rajoute dans notre tableau une colonne avec les identifiants de chaque Ă©lĂšve :
Si on applique complete comme prĂ©cĂ©demment, le rĂ©sultat nâest pas bon car il contient toutes les
combinaisons de id , eleve et matiere .
Dans ce cas, pour signifier Ă complete que id et eleve sont deux attributs dâun mĂȘme individu et ne
doivent pas ĂȘtre combinĂ©s entre eux, on doit les placer dans une fonction nesting :
Ressources
Chaque jeu de données est différent, et le travail de remise en forme est souvent long et plus ou moins
compliquĂ©. On nâa donnĂ© ici que les exemples les plus simples, et câest souvent en combinant diffĂ©rentes
opĂ©rations quâon finit par obtenir le rĂ©sultat souhaitĂ©.
Le livre R for data science, librement accessible en ligne, contient un chapitre complet sur la remise en
forme des données.
Lâarticle Tidy data, publiĂ© en 2014 dans le Journal of Statistical Software, prĂ©sente de maniĂšre dĂ©taillĂ©e le
concept éponyme (mais il utilise des extensions désormais obsolÚtes qui ont depuis été remplacées par
dplyr ettidyr).
Le site de lâextension est accessible Ă lâadresse : [Link] et contient une liste des
fonctions et les pages dâaide associĂ©es.
â 325 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Pour des usages avancĂ©s, il est possible avec tidyr de gĂ©rer des donnĂ©es nichĂ©es (nested data), câest-Ă -dire
des tableaux de données dans des tableaux de données. Ces fonctionnalités, réservées aux utilisateurs
avancés, sont décrites dans une vignette spécifique.
Fichiers volumineux
Si lâon a des tableaux de donnĂ©es particuliĂšrement volumineux (plusieurs Go), les fonctions de tidyr ne
sont pas forcéments les plus performantes.
On aura alors intĂ©rĂȘt Ă regarder du cĂŽtĂ© des fonctions melt et dcast de lâextension [Link]
développées pour optimiser la performance sur les grands tableaux de données.
â 326 â
Export de données
Export de tableaux de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Exporter des objets spatiaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Sauvegarder des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Lâextension readxl ne fournit pas de fonction pour exporter au format Excel. Par contre, on pourra
passer par la fonction [Link] de lâextension openxlsx ou la fonction [Link] de lâextension
xlsx. LâintĂ©rĂȘt de lâextension openxlsx est de ne pas dĂ©pendre de Java Ă la diffĂ©rence de lâextension xlsx.
Ces fonctions sont utiles si on souhaite diffuser des donnĂ©es Ă quelquâun dâautre, ou entre deux logiciels.
Si vous travaillez sur des donnĂ©es de grandes dimensions, les formats texte peuvent ĂȘtre lents Ă exporter
et importer. Dans ce cas, lâextension feather peut ĂȘtre utile : elle permet dâenregistrer un data frame au
format feather, qui nâest pas le plus compact mais qui est extrĂȘmement rapide Ă lire et Ă©crire 1.
1. feather est un format compatible avec Python, R et Julia. Pour plus dâinformations voir [Link]
feather
â 327 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Pour enregistrer des objets, il suffit dâutiliser la fonction save et de lui fournir la liste des objets Ă
sauvegarder et le nom du fichier :
R> load("[Link]")
Les objets d , rp2012 et tab devraient alors apparaĂźtre dans votre environnement.
I M P O R TA N T
Attention, quand on utilise load , les objets chargĂ©s sont importĂ©s directement dans lâenvironnement
en cours avec leur nom dâorigine. Si dâautres objets du mĂȘme nom existaient dĂ©jĂ , ils sont Ă©crasĂ©s sans
avertissement.
R propose diffĂ©rentes fonctions permettant dâexporter des donnĂ©es vers des formats variĂ©s.
â 328 â
Export de données
Ă nouveau, pour plus de dĂ©tails on se rĂ©fĂ©rera aux pages dâaide de ces fonctions et au manuel R Data
Import/Export accessible Ă lâadresse suivante : [Link]
â 329 â
Export de graphiques
Via lâinterface de RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Sauvegarder le fichier en tant quâimage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Sauvegarder le graphique en PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Copier le graphique dans le presse-papier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Export avec les commandes de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Export avec ggplot2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
â 331 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
â 332 â
Export de graphiques
R peut exporter un graphique dans une grande variĂ©tĂ© de formats. Nous nâaborderons ici que les
principaux. Les formats PNG, JPEG et TIFF sont des formats de type bitmap (on parle aussi dâimages
matricielles1). Lâimage est stockĂ©e sous forme de points, sa qualitĂ© dĂ©pendant de sa rĂ©solution, câest-Ă -
dire du nombre total de points qui la composent. LâintĂ©rĂȘt des images matricielles est dâĂȘtre toujours
interprĂ©tĂ©es de maniĂšre identique quelque soit lâoutil utilisĂ©. Par contre, elles ne sont pas adaptĂ©es
lorsque lâon souhaite effectuer des retouches avec un logiciel de dessin.
Pour une utilisation sur un site web, on privilĂ©giera une rĂ©solution dâimage modĂ©rĂ©e (entre 400 et 800
pixels de largeur) et les formats PNG ou JPEG. Pour un document destinĂ© Ă ĂȘtre imprimĂ©, on priviligiera
une résolution plus élevée, pour éviter un phénomÚne dit de pixellisation.
Les images vectorielles2 ont lâavantage de pouvoir ĂȘtre redimensionnĂ©es Ă volontĂ© sans perte de qualitĂ©
et produisent des fichiers en général de plus petite taille3. Elles sont donc tout à fait adaptées pour
lâimpression. Si lâon souhaite importer lâimage dans Word, on choisira le format Metafile (le seul compris
par ce logiciel). Pour Libre Office ou Open Office, on choisira le format SVG.
SVG (scalable vector graphic4) est un format libre permettant de décrire une image vectorielle. Les fichiers
SVG peuvent ĂȘtre directement lus par la majoritĂ© des navigateurs rĂ©cents (Firefox, Chrome, âŠ). De plus,
le logiciel libre de dessins Inkscape5 permet dâĂ©diter et de modifier des fichiers SVG. Ce format est donc
tout Ă fait adaptĂ© pour les graphiques que lâon souhaite retoucher avant publication. Depuis Inkscape, il
sera possible de faire un export PNG en haute résolution pour intégration dans un fichier Word.
On pourra modifier la taille de lâimage avec les paramĂštres Height (hauteur) et Width (largeur). En cliquant
sur Update Preview la prévisulation du rendu final sera mise à jour.
1. Voir [Link]
2. Voir [Link]
3. Sauf dans le cas des graphiques complexes reposant sur des dégradés de couleurs, comme les cartes produites à partir
de rasters. Auquel cas, il sera parfois préférable de privilégier un export dans un format bitmap.
4. Voir [Link]
â 333 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Les options de la boĂźte de dialogue permettent de modifier la taille du fichier PDF et, bien entendu,
dâindiquer le nom et le rĂ©pertoire du fichier Ă crĂ©er.
En cliquant sur Preview, RStudio générera un fichier temporaire afin de visualiser le rendu final.
â 334 â
Export de graphiques
Il est possible de redimensionner le graphique. De plus, on prĂ©cisera si lâon souhaite copier une version
matricielle (bitmap) ou vectorielle (metafile) du graphique.
â 335 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
La premiĂšre possibilitĂ© est dâexporter le contenu dâune fenĂȘtre dĂ©jĂ existante Ă lâaide de la fonction
[Link] . On doit fournir Ă celle-ci le format de lâexport (option device ) et le nom du fichier (option
file ).
Par exemple :
R> boxplot(rnorm(100))
[Link](device = png, file = "[Link]", width = 600)
Les formats de sortie possibles varient selon les plateformes, mais on retrouve partout les formats bitmap
png , jpeg , tiff et les formats vectoriels svg , postscript ou pdf .
Lâautre possibilitĂ© est de rediriger directement la sortie graphique dans un fichier, avant dâexĂ©cuter la
commande gĂ©nĂ©rant la figure. On doit pour cela faire appel Ă lâune des commandes permettant cette
redirection. Les plus courantes sont png , jpeg et tiff pour les formats bitmap, svg , pdf ,
postscript et [Link] pour les formats vectoriels.
Ces fonctions prennent différentes options permettant de personnaliser la sortie graphique. Les plus
courantes sont width et height qui donnent la largeur et la hauteur de lâimage gĂ©nĂ©rĂ©e (en pixels pour
les images bitmap, en pouces pour les images vectorielles) et pointsize qui donne la taille de base des
polices de caractÚre utilisées.
Il est nécessaire de faire un appel à la fonction [Link] aprÚs génération du graphique pour que le
résultat soit bien écrit dans le fichier de sortie (dans le cas contraire on se retrouve avec un fichier vide).
â 336 â
Export de graphiques
De la mĂȘme maniĂšre, pour sauvegarder nâimporte quel graphique construit avec ggplot2 et stockĂ© dans
un objet, il suffit de prĂ©ciser le nom de cet objet, comme ci-dessous, oĂč lâon sauvegarde le graphique
contenu dans lâobjet p au format vectoriel PDF, qui prĂ©serve la nettetĂ© du texte et des autres Ă©lĂ©ments
du graphique Ă nâimporte quelle rĂ©solution dâaffichage :
R> ggsave("mon_graphique.pdf",
plot = p,
width = 11, height = 8
)
â 337 â
Statistique univariée
Variable quantitative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Principaux indicateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Histogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Densité et répartition cumulée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
BoĂźtes Ă moustaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Variable qualitative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Tris Ă plat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Représentation graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Tableaux faciles avec gtsummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Exporter les graphiques obtenus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
GUIDE-R
Une version actualisée de ce chapitre est disponible sur guide-R : Statistique univariée & Intervalles
de confiance
WEBIN-R
Ce chapitre est évoqué dans le webin-R #03 (statistiques descriptives avec gtsummary et esquisse)
sur YouTube.
On entend par statistique univariĂ©e lâĂ©tude dâune seule variable, que celle-ci soit quantitative ou
qualitative. La statistique univariée fait partie de la statistique descriptive.
Nous utiliserons dans ce chapitre les donnĂ©es de lâenquĂȘte Histoire de vie 2003 fournies avec lâextension
questionr.
â 339 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> library(questionr)
data("hdv2003")
d <- hdv2003
Variable quantitative
Principaux indicateurs
Comme la fonction str nous lâa indiquĂ©, notre tableau d contient plusieurs variables numĂ©riques ou
variables quantitatives, dont la variable [Link] qui reprĂ©sente le nombre moyen passĂ© par les enquĂȘtĂ©s
à regarder la télévision quotidiennement. On peut essayer de déterminer quelques caractéristiques de
cette variable, en utilisant les fonctions mean (moyenne), sd (écart-type), min (minimum), max
(maximum) et range (étendue) :
R> mean(d$[Link])
[1] NA
[1] 2.247
[1] 1.776
[1] 0
[1] 12
â 340 â
Statistique univariée
[1] 0 12
On peut lui ajouter la fonction median qui donne la valeur médiane, quantile qui calcule plus
généralement tout type de quantiles, et le trÚs utile summary qui donne toutes ces informations ou
presque en une seule fois, avec en prime le nombre de valeurs manquantes ( NA ) :
[1] 2
R> summary(d$[Link])
0 1 2 2.247 3 12 5
La fonction summary est une fonction gĂ©nĂ©rique qui peut ĂȘtre utilisĂ©e sur tout type dâobjet, y compris un
tableau de données. Essayez donc summary(d) .
Histogramme
Tout cela est bien pratique, mais pour pouvoir observer la distribution des valeurs dâune variable
quantitative, il nây a quand mĂȘme rien de mieux quâun bon graphique.
On peut commencer par un histogramme de la rĂ©partition des valeurs. Celui-ci peut ĂȘtre gĂ©nĂ©rĂ© trĂšs
facilement avec la fonction hist :
â 341 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> hist(d$[Link], main = "Nombre d'heures passées devant la télé par jou
r", xlab = "Heures", ylab = "Effectif")
Sous RStudio, les graphiques sâaffichent dans lâonglet Plots du quadrant infĂ©rieur droit. Il est possible
dâafficher une version plus grande de votre graphique en cliquant sur Zoom.
Ici, les options main , xlab et ylab permettent de personnaliser le titre du graphique, ainsi que les
Ă©tiquettes des axes. De nombreuses autres options existent pour personnaliser lâhistogramme, parmi
celles-ci on notera :
âą probability si elle vaut TRUE , lâhistogramme indique la proportion des classes de valeurs au
lieu des effectifs.
âą breaks permet de contrĂŽler les classes de valeurs. On peut lui passer un chiffre, qui indiquera
alors le nombre de classes, un vecteur, qui indique alors les limites des différentes classes, ou
encore une chaĂźne de caractĂšre ou une fonction indiquant comment les classes doivent ĂȘtre
calculées.
âą col la couleur de lâhistogramme1.
1. Il existe un grand nombre de couleurs prédéfinies dans R. On peut récupérer leur liste en utilisant la fonction colors
â 342 â
Statistique univariée
Voir la page dâaide de la fonction hist pour plus de dĂ©tails sur les diffĂ©rentes options. Les deux figures
ci-aprĂšs sont deux autres exemples dâhistogramme.
â 343 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Le rĂ©sultat de cette estimation est ensuite reprĂ©sentĂ© graphiquement Ă lâaide de plot . Lâargument main
permet de spécifier le titre du graphique.
2. Voir [Link]
â 344 â
Statistique univariée
â 345 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> plot(ecdf(d$[Link]))
BoĂźtes Ă moustaches
Les boßtes à moustaches, ou boxplots en anglais, sont une autre représentation graphique de la répartition
des valeurs dâune variable quantitative. Elles sont particuliĂšrement utiles pour comparer les distributions
de plusieurs variables ou dâune mĂȘme variable entre diffĂ©rents groupes, mais peuvent aussi ĂȘtre utilisĂ©es
pour reprĂ©senter la dispersion dâune unique variable. La fonction qui produit ces graphiques est la
fonction boxplot .
â 346 â
Statistique univariée
3. Le code ayant servi Ă gĂ©nĂ©rer cette figure est une copie quasi conforme de celui prĂ©sentĂ© dans lâexcellent document
de Jean Lobry sur les graphiques de base avec R, téléchargeable sur le site du PÎle bioinformatique lyonnais :
[Link]
â 347 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
â 348 â
Statistique univariée
Le carré au centre du graphique est délimité par les premiers et troisiÚme quartiles, avec la médiane
reprĂ©sentĂ©e par une ligne plus sombre au milieu. Les « fourchettes » sâĂ©tendant de part et dâautres vont
soit jusquâĂ la valeur minimale ou maximale, soit jusquâĂ une valeur approximativement Ă©gale au quartile
le plus proche plus 1,5 fois lâĂ©cart interquartile. Les points se situant en-dehors de cette fourchette sont
reprĂ©sentĂ©s par des petits ronds et sont gĂ©nĂ©ralement considĂ©rĂ©s comme des valeurs extrĂȘmes,
potentiellement aberrantes.
On peut ajouter la représentation des valeurs sur le graphique pour en faciliter la lecture avec des petits
traits dessinĂ©s sur lâaxe vertical (fonction rug ) :
â 349 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Variable qualitative
Tris Ă plat
La fonction la plus utilisĂ©e pour le traitement et lâanalyse des variables qualitatives (variable prenant ses
valeurs dans un ensemble de modalités) est sans aucun doute la fonction table , qui donne les effectifs
de chaque modalitĂ© de la variable, ce quâon appelle un tri Ă plat ou tableau de frĂ©quences.
â 350 â
Statistique univariée
R> table(d$sexe)
Homme Femme
899 1101
La tableau prĂ©cĂ©dent nous indique que parmi nos enquĂȘtĂ©s on trouve 899 hommes et 1101 femmes.
Quand le nombre de modalitĂ©s est Ă©levĂ©, on peut ordonner le tri Ă plat selon les effectifs Ă lâaide de la
fonction sort .
R> table(d$occup)
R> sort(table(d$occup))
Ă noter que la fonction table exclut par dĂ©faut les non-rĂ©ponses du tableau rĂ©sultat. Lâargument useNA
de cette fonction permet de modifier ce comportement :
⹠avec useNA="no" (valeur par défaut), les valeurs manquantes ne sont jamais incluses dans le tri
Ă plat ;
⹠avec useNA="ifany" , une colonne NA est ajoutée si des valeurs manquantes sont présentes
dans les données ;
âą avec useNA="always" , une colonne NA est toujours ajoutĂ©e, mĂȘme sâil nây a pas de valeurs
â 351 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> summary(d$[Link])
Pour obtenir un tableau avec la répartition en pourcentages, on peut utiliser la fonction freq de
lâextension questionr4.
R> freq(d$qualif)
4. En lâabsence de lâextension questionr, on pourra se rabattre sur la fonction [Link] avec la commande suivante :
[Link](table(d$qualif)) .
â 352 â
Statistique univariée
permettant dâafficher les totaux, les pourcentages cumulĂ©s, de trier selon les effectifs ou de contrĂŽler
lâaffichage. Par exemple :
R> freq(d$qualif, cum = TRUE, total = TRUE, sort = "inc", digits = 2, exclude = N
A)
La colonne %cum indique ici le pourcentage cumulé, ce qui est ici une trÚs mauvaise idée puisque pour ce
type de variable cela nâa aucun sens. Les lignes du tableau rĂ©sultat ont Ă©tĂ© triĂ©s par effectifs croissants, les
totaux ont été ajoutés, les non-réponses exclues et les pourcentages arrondis à deux décimales.
La fonction freq est Ă©galement en mesure de tenir compte des Ă©tiquettes de valeurs lorsquâon utilise des
données labellisées, page 121. Ainsi :
R> data(fecondite)
questionr::describe(femmes$region)
n %
[1] Nord 707 35.4
[2] Est 324 16.2
[3] Sud 407 20.3
[4] Ouest 562 28.1
Total 2000 100.0
â 353 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> freq(femmes$region)
Représentation graphique
Pour reprĂ©senter la rĂ©partition des effectifs parmi les modalitĂ©s dâune variable qualitative, on a souvent
tendance Ă utiliser des diagrammes en secteurs (camemberts). Ceci est possible sous R avec la fonction
pie , mais la page dâaide de la dite fonction nous le dĂ©conseille assez vivement : les diagrammes en
secteur sont en effet une mauvaise maniĂšre de prĂ©senter ce type dâinformation, car lâoeil humain prĂ©fĂšre
comparer des longueurs plutĂŽt que des surfaces5.
On privilĂ©giera donc dâautres formes de reprĂ©sentations, Ă savoir les diagrammes en bĂątons et les
diagrammes de Cleveland.
Les diagrammes en bĂątons sont utilisĂ©s automatiquement par R lorsquâon applique la fonction gĂ©nĂ©rique
plot à un tri à plat obtenu avec table . On privilégiera cependant ce type de représentations pour les
variables de type numérique comportant un nombre fini de valeurs. Le nombre de frÚres, soeurs, demi-
frĂšres et demi-soeurs est un bon exemple :
â 354 â
Statistique univariée
Pour les autres types de variables qualitatives, on privilégiera les diagrammes de Cleveland, obtenus avec
la fonction dotchart . On doit appliquer cette fonction au tri Ă plat de la variable, obtenu avec table 6 :
6. Pour des raisons liées au fonctionnement interne de la fonction dotchart , on doit transformer le tri à plat en
matrice, dâoĂč lâappel Ă la fonction [Link] .
â 355 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
â 356 â
Statistique univariée
NOTE
R> dotchart(table(d$clso))
R> dotchart([Link](table(d$clso)))
Dans le cas présent, on voit apparaßtre un chiffre 1 au-dessus des modalités. En fait, dotchart peut
ĂȘtre appliquĂ© au rĂ©sultat dâun tableau croisĂ© Ă deux entrĂ©es, auquel cas il prĂ©sentera les rĂ©sultats pour
chaque colonne. Comme dans lâexemple ci-aprĂšs.
â 357 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Cela ne rĂ©soud pas le problĂšme pour notre diagramme de Cleveland issu dâun tri Ă plat simple. Pour
bien comprendre, la fonction [Link] a produit un objet Ă deux dimensions ayant une colonne et
plusieurs lignes. On indiquera Ă R que lâon ne souhaite extraire la premiĂšre colonne avec [, 1] (juste
aprĂšs lâappel Ă [Link] ). Câest ce quâon appelle lâindexation, abordĂ©e plus en dĂ©tail dans le chapitre
Listes et tableaux de données, page 91.
Quand la variable comprend un grand nombre de modalitĂ©s, il est prĂ©fĂ©rable dâordonner le tri Ă plat
obtenu Ă lâaide de la fonction sort :
â 358 â
Statistique univariée
â 359 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
NOTE
Lâagument pch , qui est utilisĂ© par la plupart des graphiques de type points, permet de spĂ©cifier le
symbole Ă utiliser. Il peut prendre soit un nombre entier compris entre 0 et 25, soit un charactĂšre
textuel (voir ci-dessous).
â 360 â
Statistique univariée
R> library(gtsummary)
d %>% tbl_summary(include = c("[Link]", "occup", "qualif"))
Characteristic N = 2,0001
Unknown 5
occup
qualif
Technicien 86 (5.2%)
Autre 58 (3.5%)
Unknown 347
Il est possible de personnaliser les statisques présentées (par exemple moyenne et écart-type à la place
de la mĂ©diane et lâintervale inter-quartile). De plus, tbl_summary prend en compte les Ă©tiquettes de
variables si elles ont été définies (voir le chapitre dédié). Il est aussi possible de franciser la présentation
â 361 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
des résultats.
R> library(labelled)
var_label(d$[Link]) <- "Heures quotidiennes devant la télévision"
var_label(d$occup) <- "Activité"
theme_gtsummary_language("fr", [Link] = ",", [Link] = " ")
Caractéristique N = 2 0001
Manquant 5
Activité
Pour une présentation de toutes les possibilités offertes, voir la vignette dédiée sur
[Link]
â 362 â
Statistique univariée
sous lâonglet Plots dans le quadrant infĂ©rieur droit. Il suffit de cliquer sur Export pour avoir accĂšs Ă trois
options différentes :
Pour une prĂ©sentation dĂ©taillĂ©e de lâexport de graphiques avec RStudio, ainsi que pour connaĂźtre les
commandes R permettant dâexporter des graphiques via un script, on pourra se rĂ©fĂ©rer au chapitre dĂ©diĂ©,
page 331.
â 363 â
Statistique bivariée
Deux variables quantitatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Trois variables ou plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Une variable quantitative et une variable qualitative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Représentations graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Tests statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Deux variables qualitatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Tableau croisé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Pourcentages en ligne et en colonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Représentation graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Tests statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Tableaux faciles avec gtsummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Analyse des associations avec GDAtools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
GUIDE-R
Une version actualisée de ce chapitre est disponible sur guide-R : Statistique bivariée & Tests de
comparaison
WEBIN-R
Ce chapitre est évoqué dans le webin-R #03 (statistiques descriptives avec gtsummary et esquisse)
sur YouTube.
On entend par statistique bivariĂ©e lâĂ©tude des relations entre deux variables, celles-ci pouvant ĂȘtre
quantitatives ou qualitatives. La statistique bivariée fait partie de la statistique descriptive.
La statistique univariée a quant à elle déjà été abordée dans un chapitre dédié, page 339.
Comme dans la partie prĂ©cĂ©dente, on travaillera sur les jeux de donnĂ©es fournis avec lâextension questionr
et tirĂ© de lâenquĂȘte Histoire de vie et du recensement 1999 :
â 365 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> library(questionr)
data(hdv2003)
d <- hdv2003
R> load(url("[Link]
a"))
Le fait que des points sont superposés ne facilite pas la lecture du graphique. On peut utiliser une
â 366 â
Statistique bivariée
Plus sophistiqué, on peut faire une estimation locale de densité et représenter le résultat sous forme
de « carte ». Pour cela on commence par isoler les deux variables, supprimer les observations ayant au
moins une valeur manquante Ă lâaide de la fonction [Link] , estimer la densitĂ© locale Ă lâaide
de la fonction kde2d de lâextension MASS1 et reprĂ©senter le tout Ă lâaide dâune des fonctions image ,
contour ou [Link] âŠ
â 367 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
R> library(MASS)
tmp <- d[, c("age", "[Link]")]
tmp <- tmp[[Link](tmp), ]
[Link](kde2d(tmp$age, tmp$[Link]), color = [Link])
Une reprĂ©sentation alternative de la densitĂ© locale peut ĂȘtre obtenue avec la fonction smoothScatter .
â 368 â
Statistique bivariée
Dans tous les cas, il nây a pas de structure trĂšs nette qui semble se dĂ©gager. On peut tester ceci
mathĂ©matiquement en calculant le coefficient de corrĂ©lation entre les deux variables Ă lâaide de la
fonction cor :
[1] 0.1776
Lâoption use permet dâĂ©liminer les observations pour lesquelles lâune des deux valeurs est manquante. Le
coefficient de corrélation est trÚs faible.
On va donc sâintĂ©resser plutĂŽt Ă deux variables prĂ©sentes dans le jeu de donnĂ©es rp99 , la part de
diplÎmés du supérieur et la proportion de cadres dans les communes du RhÎne en 1999.
â 369 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
[1] 0.8975
Câest beaucoup plus proche de 1. On peut alors effectuer une rĂ©gression linĂ©aire complĂšte en utilisant la
fonction lm :
â 370 â
Statistique bivariée
Call:
lm(formula = cadres ~ [Link], data = rp99)
Residuals:
Min 1Q Median 3Q Max
-9.691 -1.901 -0.182 1.491 17.087
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.2409 0.3299 3.76 2e-04 ***
[Link] 1.3835 0.0393 35.20 <2e-16 ***
---
Signif. codes:
0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Le résultat montre que les coefficients sont significativement différents de 0. La part de cadres augmente
donc avec celle de diplÎmés du supérieur (Î surprise). On peut trÚs facilement représenter la droite de
rĂ©gression Ă lâaide de la fonction abline .
â 371 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
â 372 â
Statistique bivariée
NOTE
On remarquera que le premier argument passé à la fonction lm a une syntaxe un peu particuliÚre. Il
sâagit dâune formule, utilisĂ©e de maniĂšre gĂ©nĂ©rale dans les modĂšles statistiques. On indique la variable
dâintĂ©rĂȘt Ă gauche et la variable explicative Ă droite, les deux Ă©tant sĂ©parĂ©es par un tilde ⌠(obtenu
sous Windows en appuyant simultanément sur les touches Alt Gr et 2 ). On remarquera que les
noms des colonnes de notre tableau de données ont été écrites sans guillemets.
Dans le cas prĂ©sent, nous avons calculĂ© une rĂ©gression linĂ©aire simple entre deux variables, dâoĂč
lâĂ©criture cadres ⌠[Link] . Si nous avions voulu expliquer une variable z par deux variables x et
y, nous aurions Ă©crit z ⌠x + y . Il est possible de spĂ©cifier des modĂšles encore plus complexes.
â 373 â
analyse-R â Introduction Ă lâanalyse dâenquĂȘtes avec R et RStudio
Figure 7. Nuage de points avec taille des points proportionnels Ă une troisiĂšme variable