Introduction À R
Introduction À R
1.1. À propos de R
R est un langage orienté vers le traitement et l’analyse quantitative de données, dérivé du langage S.
Il est développé depuis les années 90 par un groupe de volontaires de différents pays et par une large
communauté d’utilisateurs et utilisatrices. C’est un logiciel libre, publié sous licence GNU GPL.
L’utilisation de R présente plusieurs avantages :
• 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 utilisatrices, diffusable et modifiable par
tout un chacun.
• c’est un logiciel gratuit.
• c’est un logiciel puissant, dont les fonctionnalités de base peuvent être étendues à l’aide
d’extensions développées par la communauté. Il en existe plusieurs milliers.
• c’est un logiciel avec d’excellentes capacités graphiques.
• le script conserve l’ensemble des étapes d’une analyse, de l’importation des données à leur analyse
en passant par les manipulations et les recodages.
• on peut à tout moment revenir en arrière et corriger ou modifier ce qui a été fait.
• il est très rapide de réexécuter une suite d’opérations complexes.
• on peut très facilement mettre à jour les résultats en cas de modification des données sources.
• le script garantit, sous certaines conditions, la reproductibilité des résultats obtenus.
5
6 Présentation
RStudio n’est pas à proprement parler une interface graphique pour R, il s’agit plutôt d’un environ-
nement de développement intégré, qui propose des outils facilitant l’écriture de scripts et l’usage de R
au quotidien. C’est une interface bien supérieure à celles fournies par défaut lorsqu’on installe R sous
Windows ou sous Mac1 .
Pour paraphraser Hadrien Commenges, il n’y a pas d’obligation à utiliser RStudio, mais il y a une
obligation à ne pas utiliser les interfaces de R par défaut.
RStudio est également un logiciel libre et gratuit. Une version payante existe, mais elle ne propose pas
de fonctionnalités indispensables.
1.3. Prérequis
Le seul prérequis pour suivre ce document est d’avoir installé R et RStudio sur votre ordinateur.
Il s’agit de deux logiciels libres, gratuits, téléchargeables en ligne et fonctionnant sous PC, Mac et
Linux.
Pour installer R, il su it de se rendre sur une des pages suivantes 2 :
Pour installer RStudio, rendez-vous sur la page de téléchargement du logiciel et installez la version
adaptée à votre système.
1
Sous Linux R n’est fourni que comme un outil en ligne de commande.
2
Sous Linux, utilisez votre gestionnaire de packages habituel.
7
Partie I.
Introduction à R
9
2. Prise en main
Une fois R et RStudio installés sur votre machine, nous n’allons pas lancer R mais plutôt RStudio.
RStudio n’est pas à proprement parler une interface graphique qui permettrait d’utiliser R de manière
“classique” via la souris, des menus et des boîtes de dialogue. Il s’agit plutôt de ce qu’on appelle un
Environnement de développement intégré (IDE) qui facilite l’utilisation de R et le développement de
scripts (voir Section 1.2).
2.1. La console
11
12 Prise en main
La zone de gauche se nomme la Console. À son démarrage, RStudio a lancé une nouvelle session de R
et c’est dans cette fenêtre que nous allons pouvoir interagir avec lui.
La Console doit normalement afficher un texte de bienvenue ressemblant à ceci :
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 instruction.
Nous pouvons tout de suite lui fournir une première commande, en saisissant le texte suivant puis en
appuyant sur Entrée :
2 + 2
#> [1] 4
R nous répond immédiatement, et nous pouvons constater avec soulagement qu’il sait faire des addi-
tions à un chiffre1 . On peut donc continuer avec d’autres opérations :
5 - 7
#> [1] -2
4 * 12
#> [1] 48
-10 / 3
#> [1] -3.333333
5^2
#> [1] 25
Cette dernière opération utilise le symbole ^ qui représente l’opération puissance. 5^2 signifie donc “5
au carré”.
1
On peut ignorer pour le moment la présence du [1] en début de ligne.
2.2. Objets 13
Lorsqu’on saisit une commande, les espaces autour des opérateurs n’ont pas d’importance. 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.
10+2
10 + 2
10 + 2
Quand vous êtes dans la console, vous pouvez utiliser les flèches vers le haut ↑ et vers le bas ↓ de
votre clavier pour naviguer dans l’historique des commandes que vous avez tapées précédemment.
Vous pouvez à tout moment modifier la commande affichée, et l’exécuter en appuyant sur Entrée.
Enfin, il peut arriver qu’on saisisse une commande de manière incomplète : oubli d’une parenthèse,
faute de frappe, etc. Dans ce cas, R remplace l’invite de commande habituel par un signe +.
4 *
+
Cela signifie qu’il “attend la suite”. On peut alors soit compléter la commande sur cette nouvelle ligne
et appuyer sur Entrée, soit, si on est perdu, tout annuler et revenir à l’invite de commandes normal
en appuyant sur Esc ou Échap.
2.2. Objets
Faire des calculs c’est bien, mais il serait intéressant de pouvoir stocker un résultat quelque part pour
pouvoir le réutiliser ultérieurement sans avoir à faire du copier/coller.
Pour conserver le résultat d’une opération, on peut le stocker dans un objet à l’aide de l’opérateur
d’assignation <-. Cette “flèche” stocke ce qu’il y a à sa droite dans un objet dont le nom est indiqué
à sa gauche.
Prenons tout de suite un exemple.
x <- 2
Cette commande peut se lire “prend la valeur 2 et mets la dans un objet qui s’appelle x”.
Si on exécute une commande comportant juste le nom d’un objet, R affiche son contenu.
x
#> [1] 2
14 Prise en main
x + 4
#> [1] 6
x <- 2
y <- 5
resultat <- x + y
resultat
#> [1] 7
Á Avertissement
Les noms d’objets peuvent contenir des lettres, des chiffres, les symboles . et _. Ils ne peuvent
pas commencer par un chiffre. Attention, R fait la différence entre minuscules et majuscules dans
les noms d’objets, ce qui signifie que x et X seront deux objets différents, tout comme resultat
et Resultat.
De manière générale, il est préférable d’éviter les majuscules (pour les risques d’erreur) et les
caractères accentués (pour des questions d’encodage) dans les noms d’objets.
De même, il faut essayer de trouver un équilibre entre clarté du nom (comprendre à quoi
sert l’objet, ce qu’il contient) et sa longueur. Par exemple, on préfèrera comme nom d’objet
taille_conj1 à taille_du_conjoint_numero_1 (trop long) ou à t1 (pas assez explicite).
Quand on assigne une nouvelle valeur à un objet déjà existant, la valeur précédente est perdue. Les
objets n’ont pas de mémoire.
x <- 2
x <- 5
x
#> [1] 5
De la même manière, assigner un objet à un autre ne crée pas de “lien” entre les deux. Cela copie
juste la valeur de l’objet de droite dans celui de gauche :
2.2. Objets 15
x <- 1
y <- 3
x <- y
x
#> [1] 3
## Si on modifie y, cela ne modifie pas x
y <- 4
x
#> [1] 3
On le verra, les objets peuvent contenir tout un tas d’informations. Jusqu’ici on n’a stocké que des
nombres, mais ils peuvent aussi contenir des chaînes de caractères (du texte), qu’on délimite avec des
guillemets simples ou doubles (' ou ") :
2.2.2. Vecteurs
Cette manière de faire n’est clairement pas pratique du tout. On va donc plutôt stocker l’ensemble de
nos tailles dans un seul objet, de type vecteur, avec la syntaxe suivante :
Si on affiche le contenu de cet objet, on voit qu’il contient bien l’ensemble des tailles saisies.
16 Prise en main
tailles
#> [1] 156 164 197 147 173
Un vecteur dans R est un objet qui peut contenir plusieurs informations du même type, potentiellement
en très grand nombre.
L’avantage d’un vecteur est que lorsqu’on lui applique une opération, celle-ci s’applique à toutes les
valeurs qu’il contient. Ainsi, si on veut la taille en mètres plutôt qu’en centimètres, on peut faire :
tailles + 10
#> [1] 166 174 207 157 183
tailles^2
#> [1] 24336 26896 38809 21609 29929
Imaginons maintenant qu’on a aussi demandé aux cinq mêmes personnes leur poids en kilos. On peut
créer un deuxième vecteur :
On peut alors effectuer des calculs utilisant nos deux vecteurs tailles et poids. On peut par exemple
calculer l’indice de masse corporelle (IMC) de chacun de nos enquêtés en divisant leur poids en kilo
par leur taille en mètre au carré :
Un vecteur peut contenir des nombres, mais il peut aussi contenir du texte. Imaginons qu’on a demandé
aux 5 mêmes personnes leur niveau de diplôme : on peut regrouper l’information dans un vecteur de
chaînes de caractères. Une chaîne de caractère contient du texte libre, délimité par des guillemets
simples ou doubles.
2.2. Objets 17
L’opérateur :, lui, permet de générer rapidement un vecteur comprenant tous les nombres entre deux
valeurs, opération assez courante sous R :
x <- 1:10
x
#> [1] 1 2 3 4 5 6 7 8 9 10
Enfin, notons qu’on peut accéder à un élément particulier d’un vecteur en faisant suivre le nom du
vecteur de crochets contenant le numéro de l’élément désiré.
diplome[2]
#> [1] "Bac"
Cette opération, qui utilise l’opérateur [], permet donc la sélection d’éléments d’un vecteur.
Dernière remarque, si on affiche dans la console un vecteur avec beaucoup d’éléments, ceux-ci seront
répartis sur plusieurs lignes. Par exemple, si on a un vecteur de 50 nombres on peut obtenir quelque
chose comme :
[1] 294 425 339 914 114 896 716 648 915 587 181 926 489
[14] 848 583 182 662 888 417 133 146 322 400 698 506 944
[27] 237 324 333 443 487 658 793 288 897 588 697 439 697
[40] 914 694 126 969 744 927 337 439 226 704 635
On remarque que R ajoute systématiquement un nombre entre crochets au début de chaque ligne : il
s’agit en fait de la position du premier élément de la ligne dans le vecteur. Ainsi, le 848 de la deuxième
ligne est le 14e élément du vecteur, le 914 de la dernière ligne est le 40e, etc.
Ceci explique le [1] qu’on obtient quand on affiche un simple nombre2 :
[1] 4
2
Et permet de constater que pour R, un nombre est un vecteur à un seul élément.
18 Prise en main
2.3. Fonctions
2.3.1. Principe
Nous savons désormais effectuer des opérations arithmétiques de base sur des nombres et des vecteurs,
et stocker des valeurs dans des objets pour pouvoir les réutiliser plus tard.
Pour aller plus loin, nous devons aborder les fonctions qui sont, avec les objets, un deuxième concept
de base de R. On utilise des fonctions pour effectuer des calculs, obtenir des résultats et accomplir des
actions.
Formellement, une fonction a un nom, elle prend en entrée entre parenthèses un ou plusieurs arguments
(ou paramètres), et retourne un résultat.
Prenons tout de suite un exemple. Si on veut connaître le nombre d’éléments du vecteur tailles que
nous avons construit précédemment, on peut utiliser la fonction length, de cette manière :
length(tailles)
#> [1] 5
Ici, length est le nom de la fonction, on l’appelle en lui passant un argument entre parenthèses (en
l’occurrence notre vecteur tailles), et elle nous renvoie un résultat, à savoir le nombre d’éléments
du vecteur passé en paramètre.
Autre exemple, les fonctions min et max retournent respectivement les valeurs minimales et maximales
d’un vecteur de nombres.
min(tailles)
#> [1] 147
max(tailles)
#> [1] 197
mean(tailles)
#> [1] 167.4
sum(tailles)
#> [1] 837
2.3. Fonctions 19
Jusqu’à présent on n’a vu que des fonctions qui calculent et retournent un unique nombre. Mais une
fonction peut renvoyer d’autres types de résultats. Par exemple, la fonction range (étendue) renvoie
un vecteur de deux nombres, le minimum et le maximum.
range(tailles)
#> [1] 147 197
Ou encore, la fonction unique, qui supprime toutes les valeurs en double dans un vecteur, qu’il s’agisse
de nombres ou de chaînes de caractères.
2.3.2. Arguments
Une fonction peut prendre plusieurs arguments, dans ce cas on les indique entre parenthèses en les
séparant par des virgules.
On a déjà rencontré un exemple de fonction acceptant plusieurs arguments : la fonction c, qui combine
l’ensemble de ses arguments en un vecteur3 .
Ici, c est appelée en lui passant cinq arguments, les cinq tailles séparées par des virgules, et elle renvoie
un vecteur numérique regroupant ces cinq valeurs.
Supposons maintenant que dans notre vecteur tailles nous avons une valeur manquante (une per-
sonne a refusé de répondre, ou notre mètre mesureur était en panne). On symbolise celle-ci dans R
avec le code interne NA.
Ĺ Note
NA est l’abbréviation de Not available, non disponible. Cette valeur particulière peut être utilisée
pour indiquer une valeur manquante, qu’il s’agisse d’un nombre, d’une chaîne de caractères, etc.
3
c est l’abbréviation de combine, son nom est très court car on l’utilise très souvent
20 Prise en main
mean(tailles)
#> [1] NA
En effet, R considère par défaut qu’il ne peut pas calculer la moyenne si une des valeurs n’est pas
disponible. Dans ce cas il considère que la moyenne est elle-même “non disponible” et renvoie donc NA
comme résultat.
On peut cependant indiquer à mean d’effectuer le calcul en ignorant les valeurs manquantes. Ceci se
fait en ajoutant un argument supplémentaire, nommé [Link] (abbréviation de NA remove, “enlever
les NA”), et de lui attribuer la valeur TRUE (code interne de R signifiant vrai).
Positionner le paramètre [Link] à TRUE indique à la fonction mean de ne pas tenir compte des valeurs
manquantes dans le calcul.
Si on ne dit rien à la fonction mean, cet argument a une valeur par défaut, en l’occurrence FALSE
(faux), qui fait qu’il ne supprime pas les valeurs manquantes. Les deux commandes suivantes sont
donc rigoureusement équivalentes :
mean(tailles)
#> [1] NA
mean(tailles, [Link] = FALSE)
#> [1] NA
Ĺ Note
Lorsqu’on passe un argument à une fonction de cette manière, c’est-à-dire sous la forme nom =
valeur, on parle d’argument nommé.
Il est fréquent de ne pas savoir (ou d’avoir oublié) quels sont les arguments d’une fonction, ou comment
ils se nomment. On peut à tout moment faire appel à l’aide intégrée à R en passant le nom de la fonction
(entre guillemets) à la fonction help.
help("mean")
Ces deux commandes affichent une page (en anglais) décrivant la fonction, ses paramètres, 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.
Dans RStudio, les pages d’aide en ligne s’ouvriront par défaut dans la zone en bas à droite, sous
l’onglet Help. Un clic sur l’icône en forme de maison vous affichera la page d’accueil de l’aide.
mean(tailles)
mean(poids)
2.4.1. Commentaires
Les commentaires sont un élément très important d’un script. Il s’agit de texte libre, ignoré par R, et
qui permet de décrire les étapes du script, sa logique, les raisons pour lesquelles on a procédé de telle
ou telle manière… Il est primordial de documenter ses scripts à l’aide de commentaires, car il est très
facile de ne plus se retrouver dans un programme qu’on a produit soi-même, même après une courte
interruption.
Pour ajouter un commentaire, il suffit de le faire précéder d’un ou plusieurs symboles #. En effet, dès
que R rencontre ce caractère, il ignore tout ce qui se trouve derrière, jussqu’à la fin de la ligne.
On peut donc documenter le script précédent :
# Calcul de l'IMC (poids en kilo divisé par les tailles en mètre au carré)
imc <- poids / (tailles / 100) ^ 2
# Valeurs extrêmes de l'IMC
min(imc)
max(imc)
Il suffit alors d’indiquer le nom de l’extension dans le champ Package et de cliquer sur Install.
On peut aussi installer des extensions en utilisant la fonction [Link]() directement dans
la console. Par exemple, pour installer le package questionr on peut exécuter la commande :
[Link]("questionr")
Installer une extension via l’une des deux méthodes précédentes va télécharger l’ensemble des fichiers
nécessaires depuis l’une des machines du CRAN, puis installer tout ça sur le disque dur de votre
ordinateur. Vous n’avez besoin de le faire qu’une fois, comme vous le faites pour installer un programme
sur votre Mac ou PC.
Une fois l’extension installée, il faut la “charger” avant de pouvoir utiliser les fonctions qu’elle propose.
Ceci se fait avec la fonction library. Par exemple, pour pouvoir utiliser les fonctions de questionr,
vous devrez exécuter la commande suivante :
library(questionr)
Ainsi, on regroupe en général en début de script toute une série d’appels à library qui permettent
de charger tous les packages utilisés dans le script. Quelque chose comme :
library(readxl)
library(ggplot2)
library(questionr)
24 Prise en main
Si vous essayez d’exécuter une fonction d’une extension et que vous obtenez le message d’erreur
impossible de trouver la fonction, c’est certainement parce que vous n’avez pas exécuté la com-
mande library correspondante.
2.6. Exercices
Exercice 1
Construire le vecteur x suivant :
Exercice 2
On a demandé à 4 ménages le revenu des deux conjoints, et le nombre de personnes du ménage :
Calculer le revenu total de chaque ménage, puis diviser par le nombre de personnes pour obtenir le
revenu par personne de chaque ménage.
Exercice 3
Dans l’exercice précédent, calculer le revenu minimum et maximum parmi ceux du premier conjoint.
Recommencer avec les revenus suivants, parmi lesquels l’un des enquetés n’a pas voulu répondre :
Exercice 4
Les deux vecteurs suivants représentent les précipitations (en mm) et la température (en °C) moyennes
pour chaque mois de l’année pour la ville de Lyon (moyennes calculées sur la période 1981-2010) :
2.6. Exercices 25
temperature <- c(3.4, 4.8, 8.4, 11.4, 15.8, 19.4, 22.2, 21.6, 17.6, 13.4, 7.6, 4.4)
precipitations <- c(47.2, 44.1, 50.4, 74.9, 90.8, 75.6, 63.7, 62, 87.5, 98.6, 81.9, 55.2)
cumsum(precipitations)
#> [1] 47.2 91.3 141.7 216.6 307.4 383.0 446.7 508.7 596.2 694.8 776.7 831.9
diff(temperature)
#> [1] 1.4 3.6 3.0 4.4 3.6 2.8 -0.6 -4.0 -4.2 -5.8 -3.2
Exercice 5
On a relevé les notes en maths, anglais et sport d’une classe de 6 élèves et on a stocké ces données
dans trois vecteurs :
Dans cette partie nous allons (enfin) travailler sur des “vraies” données, et utiliser un jeu de données
présent dans l’extension questionr. Nous devons donc avant toute chose installer cette extension.
Pour installer ce package, deux possibilités :
• Dans l’onglet Packages de la zone de l’écran en bas à droite, cliquez sur le bouton Install. Dans
le dialogue qui s’ouvre, entrez “questionr” dans le champ Packages puis cliquez sur Install.
• Saisissez directement la commande suivante dans la console : [Link]("questionr")
Dans les deux cas, tout un tas de messages devraient s’afficher dans la console. Attendez que l’invite
de commandes > apparaisse à nouveau.
Pour plus d’informations sur les extensions et leur installation, voir Section 2.5.
Le jeu de données que nous allons utiliser 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 une description plus complète et une
liste des variables, voir la Section A.3.2.2.
Pour pouvoir utiliser ces données, il faut d’abord charger l’extension questionr (après l’avoir installée,
bien entendu) :
library(questionr)
L’utilisation de library permet de rendre “disponibles”, dans notre session R, les fonctions et jeux
de données inclus dans l’extension.
Nous devons ensuite indiquer à R que nous souhaitons accéder au jeu de données à l’aide de la
commande data :
data(hdv2003)
Cette commande ne renvoie aucun résultat particulier (sauf en cas d’erreur), mais vous devriez voir
apparaître dans l’onglet Environment de RStudio un nouvel objet nommé hdv2003.
27
28 Premier travail avec des données
Cet objet est d’un type nouveau : il s’agit d’un tableau de données.
Un data frame (ou tableau de données, ou table) est un type d’objet R qui contient des données au
format tabulaire, avec les observations en ligne et les variables en colonnes, comme dans une feuille de
tableur de type LibreOffice ou Excel.
Si on se contente d’exécuter le nom de notre tableau de données R va, comme à son habitude, nous
l’afficher dans la console, ce qui est tout sauf utile.
hdv2003
Une autre manière d’afficher le contenu du tableau est de cliquer sur l’icône en forme de tableau à
droite du nom de l’objet dans l’onglet Environment :
View(hdv2003)
Dans les deux cas votre tableau devrait s’afficher dans RStudio avec une interface de type tableur :
3.2. Tableau de données ( data frame) 29
Il est important de comprendre que l’objet hdv2003 contient l’intégralité des données du tableau. On
voit donc qu’un objet peut contenir des données de types très différents (simple nombre, texte, vecteur,
tableau de données entier), et être potentiellement de très grande taille1 .
Ĺ Note
Sous R, on peut importer ou créer autant de tableaux de données qu’on le souhaite, dans les
limites des capacités de sa machine.
Un data frame peut être manipulé comme les autres objets vus précédemment. On peut par exemple
faire :
d <- hdv2003
ce qui va entraîner la copie de l’ensemble de nos données dans un nouvel objet nommé d. Ceci peut
paraître parfaitement inutile mais a en fait l’avantage de fournir un objet avec un nom beaucoup plus
court, ce qui diminuera la quantité de texte à saisir par la suite.
Pour résumer, 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 :
1
La seule limite pour la taille d’un objet étant la mémoire vive (RAM) de la machine sur laquelle tourne la session R.
30 Premier travail avec des données
Un tableau étant un objet comme un autre, on peut lui appliquer des fonctions. Par exemple, nrow et
ncol retournent le nombre de lignes et de colonnes du tableau.
nrow(d)
#> [1] 2000
ncol(d)
#> [1] 20
La fonction dim renvoie ses dimensions, donc les deux nombres précédents.
dim(d)
#> [1] 2000 20
La fonction names retourne les noms des colonnes du tableau, c’est-à-dire la liste de nos variables.
names(d)
#> [1] "id" "age" "sexe" "nivetud"
#> [5] "poids" "occup" "qualif" "[Link]"
#> [9] "clso" "relig" "[Link]" "[Link]"
#> [13] "[Link]" "[Link]" "[Link]" "cuisine"
#> [17] "bricol" "cinema" "sport" "[Link]"
Enfin, la fonction str renvoie un descriptif plus détaillé de la structure du tableau. Elle liste les
différentes variables, indique leur type 2 et affiche les premières valeurs.
2
Les différents types de variables seront décrits plus en détail Chapitre 9 sur les recodages.
3.2. Tableau de données ( data frame) 31
str(d)
#> '[Link]': 2000 obs. of 20 variables:
#> $ id : int 1 2 3 4 5 6 7 8 9 10 ...
#> $ age : int 28 23 59 34 71 35 60 47 20 28 ...
#> $ sexe : Factor w/ 2 levels "Homme","Femme": 2 2 1 1 2 2 2 1 2 1 ...
#> $ nivetud : Factor w/ 8 levels "N'a jamais fait d'etudes",..: 8 NA 3 8 3 6 3 6 NA 7 ..
#> $ poids : num 2634 9738 3994 5732 4329 ...
#> $ occup : Factor w/ 7 levels "Exerce une profession",..: 1 3 1 1 4 1 6 1 3 1 ...
#> $ qualif : Factor w/ 7 levels "Ouvrier specialise",..: 6 NA 3 3 6 6 2 2 NA 7 ...
#> $ [Link]: int 8 2 2 1 0 5 1 5 4 2 ...
#> $ clso : Factor w/ 3 levels "Oui","Non","Ne sait pas": 1 1 2 2 1 2 1 2 1 2 ...
#> $ relig : Factor w/ 6 levels "Pratiquant regulier",..: 4 4 4 3 1 4 3 4 3 2 ...
#> $ [Link] : Factor w/ 4 levels "Le plus important",..: 4 NA 2 3 NA 1 NA 4 NA 3 ...
#> $ [Link] : Factor w/ 3 levels "Satisfaction",..: 2 NA 3 1 NA 3 NA 2 NA 1 ...
#> $ [Link] : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
#> $ [Link] : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
#> $ [Link] : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 2 2 1 1 ...
#> $ cuisine : Factor w/ 2 levels "Non","Oui": 2 1 1 2 1 1 2 2 1 1 ...
#> $ bricol : Factor w/ 2 levels "Non","Oui": 1 1 1 2 1 1 1 2 1 1 ...
#> $ cinema : Factor w/ 2 levels "Non","Oui": 1 2 1 2 1 2 1 1 2 2 ...
#> $ sport : Factor w/ 2 levels "Non","Oui": 1 2 2 2 1 2 1 1 1 2 ...
#> $ [Link] : num 0 1 0 2 3 2 2.9 1 2 2 ...
À noter que sous RStudio, on peut afficher à tout moment la structure d’un objet en cliquant sur
l’icône de triangle sur fond bleu à gauche du nom de l’objet dans l’onglet Environment.
Une opération très importante est l’accès aux variables du tableau (à ses colonnes) pour pouvoir les
manipuler, effectuer des calculs, etc. On utilise pour cela l’opérateur $, qui permet d’accéder aux
colonnes du tableau. Ainsi, si l’on tape :
d$sexe
#> [1] Femme Femme Homme Homme Femme Femme Femme Homme Femme Homme Femme Homme
#> [13] Femme Femme Femme Femme Homme Femme Homme Femme Femme Homme Femme Femme
#> [25] Femme Homme Femme Homme Homme Homme Homme Homme Homme Homme Femme Femme
#> [37] Homme Femme Femme Homme Femme Homme Homme Femme Femme Homme Femme Femme
#> [49] Femme Femme Homme Femme Homme Femme Homme Femme Femme Femme Homme Femme
#> [61] Femme Homme Homme Homme Homme Femme Homme Homme Femme Femme Homme Homme
#> [73] Femme Femme Femme Femme Homme Femme Femme Femme Femme Femme Femme Homme
#> [85] Homme Femme Homme Homme Homme Homme Homme Femme Homme Femme Femme Femme
#> [97] Homme Homme Femme Femme Femme Homme Femme Homme Homme Femme Femme Femme
#> [109] Femme Homme Homme Homme Homme Homme Femme Homme Homme Femme Homme Homme
#> [121] Femme Femme Femme Homme Femme Femme Homme Femme Femme Homme Femme Homme
#> [133] Femme Femme Femme Homme Homme Homme Homme Homme Homme Homme Homme Femme
#> [145] Homme Homme Homme Femme Femme Femme Homme Femme Femme Femme Femme Homme
#> [157] Femme Homme Homme Homme Femme Homme Femme Homme Femme Homme Homme Femme
#> [169] Femme Femme Homme Femme Homme Femme Femme Femme Homme Homme Homme Femme
#> [181] Homme Femme Femme Homme Homme Femme Femme Femme Femme Femme Homme Homme
#> [193] Femme Homme Homme Femme Homme Femme Homme Femme
#> [ reached getOption("[Link]") -- omitted 1800 entries ]
#> Levels: Homme Femme
R va afficher l’ensemble des valeurs de la variable sexe dans la console, ce qui est à nouveau fort
peu utile. Mais cela nous permet de constater que d$sexe est un vecteur de chaînes de caractères tels
qu’on en a déjà rencontré précédemment.
La fonction table$colonne renvoie donc la colonne nommée colonne du tableau table, c’est-à-dire
un vecteur, en général de nombres ou de chaînes de caractères.
Si on souhaite afficher seulement les premières ou dernières valeurs d’une variable, on peut utiliser les
fonctions head et tail.
head(d$age)
#> [1] 28 23 59 34 71 35
tail(d$age, 10)
#> [1] 52 42 50 41 46 45 46 24 24 66
On peut aussi utiliser l’opérateur $ pour créer une nouvelle variable dans notre tableau : pour cela, il
suffit de lui assigner une valeur.
Par exemple, la variable [Link] contient le nombre d’heures passées quotidiennement devant la
télé.
head(d$[Link], 10)
#> [1] 0.0 1.0 0.0 2.0 3.0 2.0 2.9 1.0 2.0 2.0
On peut vouloir créer une nouvelle variable dans notre tableau qui contienne la même durée convertie
en minutes. On va donc créer une nouvelle variables [Link] de la manière suivante :
On peut alors constater, soit visuellement soit dans la console, qu’une nouvelle variable (une nouvelle
colonne) a bien été ajoutée au tableau.
head(d$[Link])
#> [1] 0 60 0 120 180 120
On a donc désormais accès à un tableau de données d, dont les lignes sont des observations (des
individus enquêtés), et les colonnes des variables (des caractéristiques de chacun de ces individus), et
on sait accéder à ces variables grâce à l’opérateur $.
Si on souhaite analyser ces variables, les méthodes et fonctions utilisées seront différentes selon qu’il
s’agit d’une variable quantitative (variable numérique pouvant prendre un grand nombre de valeurs :
l’âge, le revenu, un pourcentage…) ou d’une variable qualitative (variable pouvant prendre un nombre
limité de valeurs appelées modalités : le sexe, la profession, le dernier diplôme obtenu, etc.).
Une variable quantitative est une variable de type numérique (un nombre) qui peut prendre un grand
nombre de valeurs. On en a plusieurs dans notre jeu de données, notamment l’âge (variable age) ou
le nombre d’heures passées devant la télé ([Link]).
34 Premier travail avec des données
Caractériser une variable quantitative, c’est essayer de décrire la manière dont ses valeurs se répar-
tissent, ou se distribuent.
Pour cela on peut commencer par regarder les valeurs extrêmes, avec les fonctions min, max ou range.
min(d$age)
#> [1] 18
max(d$age)
#> [1] 97
range(d$age)
#> [1] 18 97
On peut aussi calculer des indicateurs de centralité : ceux-ci indiquent autour de quel nombre se
répartissent les valeurs de la variable. Il y en a plusieurs, le plus connu étant la moyenne, qu’on peut
calculer avec la fonction mean.
mean(d$age)
#> [1] 48.157
Il existe aussi la médiane, qui est la valeur qui sépare notre population en deux : on a la moitié de nos
observations en-dessous, et la moitié au-dessus. Elle se calcule avec la fonction median.
median(d$age)
#> [1] 48
Une différence entre les deux indicateurs est que la médiane est beaucoup moins sensible aux valeurs
“extrêmes” : on dit qu’elle est plus robuste. Ainsi, en 2019, le salaire net moyen des salariés à temps
plein dans le secteur privé en France était de 2424 euros, tandis que le salaire net médian n’était que
de 1940 euros. La différence étant due à des très hauts salaires qui “tirent” la moyenne vers le haut.
Les indicateurs de dispersion permettent de mesurer si les valeurs sont plutôt regroupées ou au
contraire plutôt dispersées.
L’indicateur le plus simple est l’étendue de la distribution, qui décrit l’écart maximal observé entre
les observations :
max(d$age) - min(d$age)
#> [1] 79
3.3. Analyse univariée 35
Les indicateurs de dispersion les plus utilisés sont la variance ou, de manière équivalente, l’écart-type
(qui est égal à la racine carrée de la variance). On obtient la première avec la fonction var, et le second
avec sd (abbréviation de standard deviation).
var(d$age)
#> [1] 287.0249
sd(d$age)
#> [1] 16.94181
Plus la variance ou l’écart-type sont élevés, plus les valeurs sont dispersées autour de la moyenne. À
l’inverse, plus ils sont faibles et plus les valeurs sont regroupées.
Une autre manière de mesurer la dispersion est de calculer les quartiles :
• le premier quartile est la valeur pour laquelle on a 25% des observations en dessous et 75% au
dessus
• le deuxième quartile est la valeur pour laquelle on a 50% des observations en dessous et 50% au
dessus (c’est donc la médiane)
• le troisième quartile est la valeur pour laquelle on a 75% des observations en dessous et 25% au
dessus
## Premier quartile
quantile(d$age, prob = 0.25)
#> 25%
#> 35
## Troisième quartile
quantile(d$age, prob = 0.75)
#> 75%
#> 60
quantile prend deux arguments principaux : le vecteur dont on veut calculer le quantile, et un
argument prob qui indique quel quantile on souhaite obtenir. prob prend une valeur entre 0 et 1 : 0.5
est la médiane, 0.25 le premier quartile, 0.1 le premier décile, etc.
Notons enfin que la fonction summary permet d’obtenir d’un seul coup plusieurs indicateurs clas-
siques :
36 Premier travail avec des données
summary(d$age)
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 18.00 35.00 48.00 48.16 60.00 97.00
L’outil le plus utile pour étudier la distribution des valeurs d’une variable quantitative reste la repré-
sentation graphique.
La représentation la plus courante est sans doute l’histogramme. On peut l’obtenir avec la fonction
hist.
hist(d$age)
Histogram of d$age
150
Frequency
50
0
20 40 60 80 100
d$age
Cette fonction n’a pas pour effet direct d’effectuer un calcul ou de nous renvoyer un résultat : elle
génère un graphique qui va s’afficher dans l’onglet Plots de RStudio.
On peut personnaliser l’apparence de l’histogramme en ajoutant des arguments supplémentaires à la
fonction hist. L’argument le plus important est breaks, qui permet d’indiquer le nombre de classes
que l’on souhaite.
Histogram of d$age
300
Frequency
100
0
20 40 60 80 100
d$age
Histogram of d$age
50
Frequency
30
0 10
20 40 60 80 100
d$age
Le choix d’un “bon” nombre de classes pour un histogramme n’est pas un problème simple : si on a
trop peu de classes, on risque d’effacer quasiment toutes les variations, et si on en a trop on risque
d’avoir trop de détails et de masquer les grandes tendances.
Les arguments de hist permettent également de modifier la présentation du graphique. On peut ainsi
changer la couleur des barres avec col3 , le titre avec main, les étiquettes des axes avec xlab et ylab,
3
Les différentes manières de spécifier des couleurs sont indiquées dans l’encadré Section 8.7.3.
38 Premier travail avec des données
etc. :
50
0
20 40 60 80 100
Âge
La fonction hist fait partie des fonctions graphique de base de R. On verra plus en détail d’autres
fonctions graphiques dans le Chapitre 8 de ce document, consacrée à l’extension ggplot2, qui fait
partie du tidyverse et qui permet la production et la personnalisation de graphiques complexes.
Une variable qualitative est une variable qui ne peut prendre qu’un nombre limité de valeurs, appelées
modalités. Dans notre jeu de données on trouvera par exemple le sexe (sexe), le niveau d’études
(nivetud), la catégorie socio-professionnelle (qualif)…
À noter qu’une variable qualitative peut tout-à-fait être numérique, et que certaines variables peuvent
être traitées soit comme quantitatives, soit comme qualitatives : c’est le cas par exemple du nombre
d’enfants ou du nombre de frères et soeurs.
L’outil le plus utilisé pour représenter la répartition des valeurs d’une variable qualitative est le tri à
plat : il s’agit simplement de compter, pour chacune des valeurs possibles de la variable (pour chacune
des modalités), le nombre d’observations ayant cette valeur. Un tri à plat s’obtient sous R à l’aide de
la fonction table.
3.3. Analyse univariée 39
table(d$sexe)
#>
#> Homme Femme
#> 899 1101
Ce tableau nous indique donc que parmi nos enquêtés on trouve 899 hommes et 1101 femmes.
table(d$qualif)
#>
#> Ouvrier specialise Ouvrier qualifie Technicien
#> 203 292 86
#> Profession intermediaire Cadre Employe
#> 160 260 594
#> Autre
#> 58
Un tableau de ce type peut être affiché ou stocké dans un objet, et on peut à son tour lui appliquer
des fonctions. Par exemple, la fonction sort permet de trier le tableau selon la valeur de l’effectif.
Á Avertissement
Attention, par défaut la fonction table n’affiche pas les valeurs manquantes (NA). Si on sou-
haite les inclure il faut utiliser l’argument useNA = "always", soit : table(d$qualif, useNA =
"always").
À noter qu’on peut aussi appliquer summary à une variable qualitative. Le résultat est également le
tri à plat de la variable, avec en plus le nombre de valeurs manquantes éventuelles.
summary(d$qualif)
#> Ouvrier specialise Ouvrier qualifie Technicien
#> 203 292 86
#> Profession intermediaire Cadre Employe
40 Premier travail avec des données
Par défaut ces tris à plat sont en effectifs et ne sont pas toujours très lisibles, notamment quand on
a des effectifs importants. On leur rajoute donc en général la répartition en pourcentages. Pour cela,
nous allons utiliser la fonction freq de l’extension questionr, qui devra donc avoir précédemment été
chargée avec library(questionr).
freq(d$qualif)
#> n % val%
#> Ouvrier specialise 203 10.2 12.3
#> Ouvrier qualifie 292 14.6 17.7
#> Technicien 86 4.3 5.2
#> Profession intermediaire 160 8.0 9.7
#> Cadre 260 13.0 15.7
#> Employe 594 29.7 35.9
#> Autre 58 2.9 3.5
#> NA 347 17.3 NA
• valid indique si on souhaite ou non afficher les pourcentages sur les valeurs valides
• cum indique si on souhaite ou non afficher les pourcentages cumulés
• total permet d’ajouter une ligne avec les effectifs totaux
• sort permet de trier le tableau par fréquence croissante (sort="inc") ou décroissante
(sort="dec").
On peut représenter graphiquement le tri à plat d’une variable qualitative avec un diagramme en
barres, obtenu avec la fonction barplot. Attention, contrairement à hist cette fonction ne s’applique
pas directement à la variable mais au résultat du tri à plat de cette variable, calculé avec table. Il
faut donc procéder en deux étapes.
On peut aussi trier le tri à plat avec la fonction sort avant de le représenter graphiquement, ce qui
peut faciliter la lecture du graphique :
barplot(sort(tab))
42 Premier travail avec des données
800
400
0
Une alternative au graphique en barres est le diagramme de Cleveland, qu’on peut obtenir avec la
fonction dotchart. Celle-ci s’applique elle aussi au tri à plat de la variable calculé avec table.
dotchart(table(d$qualif))
Autre
Employe
Cadre
Profession intermediaire
Technicien
Ouvrier qualifie
Ouvrier specialise
Là aussi, pour améliorer la lisibilité du graphique il est préférable de trier le tri à plat de la variable
avant de le représenter :
3.4. Exercices 43
dotchart(sort(table(d$qualif)))
Employe
Ouvrier qualifie
Cadre
Ouvrier specialise
Profession intermediaire
Technicien
Autre
3.4. Exercices
Exercice 1
Créer un nouveau script qui effectue les actions suivantes :
Exercice 2
On souhaite étudier la répartition du temps passé devant la télévision par les enquêtés (variable
[Link]). Pour cela, affichez les principaux indicateurs de cette variable : valeur minimale, maxi-
male, moyenne, médiane et écart-type. Représentez ensuite sa distribution par un histogramme en 10
classes.
Exercice 3
On s’intéresse maintenant à l’importance accordée par les enquêtés à leur travail (variable [Link]).
Faites un tri à plat des effectifs des modalités de cette variable avec la commande table.
Faites un tri à plat affichant à la fois les effectifs et les pourcentages de chaque modalité. Y’a-t-il des
valeurs manquantes ?
Représentez graphiquement les effectifs des modalités à l’aide d’un graphique en barres.
Utilisez l’argument col de la fonction barplot pour modifier la couleur du graphique en tomato.
44 Premier travail avec des données
Tapez colors() dans la console pour afficher l’ensemble des noms de couleurs disponibles dans R.
Testez chaque couleur une à une pour trouver votre couleur préférée.