Académique Documents
Professionnel Documents
Culture Documents
Introduction
2.1
2.2
2.3
3.1
3.2
3.3
Introduction
La gestion des donnes sous R nest pas aussi vidente quil ny parat au premier abord. Cest essentiellement d au
fait que lon ne voit pas les donnes comme sur un tableur de type Excel. Toutefois, R ore des outils puissants de
recodage des variables et de reformatage des tableaux de donnes, et permet de lire quasiment tous les formats de
chiers de donnes utiliss dans le domaine statistique.
2
2.1
Considrons le chier de donnes smp2.csv qui regroupe les donnes sur ltude de sant mentale en prison. Ce
chier comporte 26 variables et 799 observations (individus ou units statistiques). Il sagit dun chier de type CSV
(comma separated values) que lon peut ouvrir avec un tableur de type Excel ou nimporte quel diteur de texte.
Souvent dailleurs, lorsque lon double-clique sur un chier portant cette extension (.csv), cest lapplication Excel
(ou Open Oce, par exemple) qui est propose pour lire ce chier. Voici quoi ressemble ce chier en mode texte :
Ce chier est structur de la manire suivante : sur la premire ligne gure le nom des variables. Les donnes de
chaque individu pour chacune de ces variables sont reportes sur une ligne spare. Les donnes (nom de variable
sur la premire ligne, ou valeur prise par une variable pour un individu sur les lignes suivantes), appel champ,
sont spares par un mme symbole, appel sparateur de champ, ici un point-virgule. Dautres sparateurs de
champ peuvent tre utiliss, par exemple des virgules, des taquets de tabulation ou de simples espaces.
1
Le sparateur dcimal quant lui permet dindiquer R comment sont reprsents les nombres virgules. Par
dfaut, R utilise la notation anglo-saxonne (le sparateur dcimal est alors un point, par exemple 9.2), sauf dans
le cas de la commande read.csv2() o lon considre que le sparateur dcimal suit la notation franaise (une
virgule, comme dans 9,2). videmment, il y a des situations impossibles : utiliser comme sparateur de champs des
virgules imposera le point comme sparateur dcimal, autrement R na aucun moyen didentier correctement le
nombre de champs prsents sur chaque ligne du chier.
Si aucune ligne den-tte nest prsente, il faudra prciser loption header = FALSE, et ventuellement fournir
le nom des variables sous forme de liste via loption col.names =. Cela dit il est tout aussi simple dutiliser la
commande colnames() aprs avoir import le chier.
Pour importer des chiers CSV sous R, on utilise la commande read.csv() ou read.csv2(), qui reposent
en fait sur la commande read.table(), mais avec des options par dfaut : sep = ;/dec = , dans le cas de
read.csv2(), et sep = ,/dec = . dans le cas de read.csv(). Dans tous les cas, on suppose que header
= TRUE, cest--dire que le chier comporte bien une ligne den-tte.
Avant dimporter un chier, il faut sassurer que R connat lendroit o ce chier a t enregistr. Pour cela, deux
solutions : soit lon indique le chemin daccs complet au chier, soit on change le rpertoire de travail courant pour
indiquer le rpertoire dans lequel le chier a t enregistr. Dans le premier cas, on aura donc une instruction du
style :
dim(smp)
## [1] 799
26
names(smp)
##
##
##
##
##
##
##
[1]
[5]
[9]
[13]
[17]
[21]
[25]
"age"
"n.enfant"
"juge.enfant"
"dep.cons"
"subst.cons"
"ed"
"suicide.past"
"prof"
"n.fratrie"
"place"
"ago.cons"
"scz.cons"
"dr"
"dur.interv"
"duree"
"ecole"
"abus"
"ptsd.cons"
"char"
"suicide.s"
"discip"
"separation"
"grav.cons"
"alc.cons"
"rs"
"suicide.hr"
str(smp)
## 'data.frame':
## $ age
:
## $ prof
:
## $ duree
:
## $ discip
:
## $ n.enfant
:
## $ n.fratrie
:
## $ ecole
:
## $ separation :
## $ juge.enfant :
## $ place
:
## $ abus
:
## $ grav.cons
:
## $ dep.cons
:
## $ ago.cons
:
## $ ptsd.cons
:
## $ alc.cons
:
## $ subst.cons :
## $ scz.cons
:
## $ char
:
## $ rs
:
## $ ed
:
## $ dr
:
## $ suicide.s
:
## $ suicide.hr :
## $ suicide.past:
## $ dur.interv :
XLS ou CSV. Il est galement possible de lire directement des chiers Excel, voire une sous-partie dune
feuille de calcul (par exemple, une zone de plage A2:C5, soit 12 cellules au total), laide de packages
spcialiss. Cela dit, comme il est tout aussi simple dexporter les donnes au format CSV depuis Excel,
et que ce type de format de donnes pose moins de problme de compatibilit de version entre les
logiciels et les systmes dexploitation, on prfrera gnralement le format CSV.
2.2
Une fois import dans R, le chier de donnes devient un tableau rectangulaire appel data frame dans le jargon
technique R. Ici, notre tableau de donnes est accessible via le data frame smp, qui est le nom de variable laquelle
nous avons associ les donnes lors de la lecture avec read.csv2().
class(smp)
## [1] "data.frame"
Il sagit en fait dune structure de donnes deux dimensions (lignes = observations, colonnes = variables) contenant
des donnes potentiellement de type mixte (nombres et chanes de caractres). Une colonne comprendra ainsi
toujours des objets du mme type (par exemple des nombres pour dnoter les valeurs prises par une variable
numrique), mais les direntes colonnes pourront contenir des objets de type dirents (des nombres dans lune,
des caractres dans lautre). Qui plus est, chaque ligne est identie par un identicateur unique, appel rowname.
rownames(smp)[1:10]
##
[1] "1"
"2"
"3"
"4"
"5"
"6"
"7"
"8"
"9"
"10"
Il est important de sassurer que les donnes sont bien reprsentes comme on le souhaite, en particulier que
les variables qualitatives avec un dtermin de modalits (ou niveaux) sont bien traites comme telle par R. En
loccurence, leur type doit tre factor. Cest le cas de la variable prof dans le data frame smp.
summary(smp)
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
age
Min.
:19.0
1st Qu.:28.0
Median :37.0
Mean
:38.9
3rd Qu.:48.0
Max.
:83.0
NA's
:2
n.enfant
Min.
: 0.00
1st Qu.: 0.00
Median : 1.00
Mean
: 1.75
3rd Qu.: 3.00
Max.
:13.00
prof
duree
discip
ouvrier
:227
Min.
:1.0
Min.
:0.000
sans emploi
:222
1st Qu.:4.0
1st Qu.:0.000
employe
:135
Median :5.0
Median :0.000
artisan
: 90
Mean
:4.3
Mean
:0.232
prof.intermediaire: 58
3rd Qu.:5.0
3rd Qu.:0.000
(Other)
: 61
Max.
:5.0
Max.
:1.000
NA's
: 6
NA's
:223
NA's
:6
n.fratrie
ecole
separation
Min.
: 0.00
Min.
:1.00
Min.
:0.000
1st Qu.: 2.00
1st Qu.:1.00
1st Qu.:0.000
Median : 3.00
Median :2.00
Median :0.000
Mean
: 4.29
Mean
:1.87
Mean
:0.423
3rd Qu.: 6.00
3rd Qu.:2.00
3rd Qu.:1.000
Max.
:21.00
Max.
:5.00
Max.
:1.000
5
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
NA's
:26
juge.enfant
Min.
:0.000
1st Qu.:0.000
Median :0.000
Mean
:0.277
3rd Qu.:1.000
Max.
:1.000
NA's
:5
dep.cons
Min.
:0.000
1st Qu.:0.000
Median :0.000
Mean
:0.397
3rd Qu.:1.000
Max.
:1.000
place
Min.
:0.000
1st Qu.:0.000
Median :0.000
Mean
:0.229
3rd Qu.:0.000
Max.
:1.000
NA's
:7
ago.cons
Min.
:0.000
1st Qu.:0.000
Median :0.000
Mean
:0.167
3rd Qu.:0.000
Max.
:1.000
subst.cons
Min.
:0.000
1st Qu.:0.000
Median :0.000
Mean
:0.265
3rd Qu.:1.000
Max.
:1.000
scz.cons
Min.
:0.0000
1st Qu.:0.0000
Median :0.0000
Mean
:0.0826
3rd Qu.:0.0000
Max.
:1.0000
ed
Min.
:1.00
1st Qu.:1.00
Median :2.00
Mean
:1.87
3rd Qu.:3.00
Max.
:3.00
NA's
:107
suicide.past
Min.
:0.000
1st Qu.:0.000
Median :0.000
Mean
:0.284
3rd Qu.:1.000
Max.
:1.000
NA's
:14
dr
Min.
:1.00
1st Qu.:1.00
Median :2.00
Mean
:2.15
3rd Qu.:3.00
Max.
:3.00
NA's
:111
dur.interv
Min.
: 0.0
1st Qu.: 48.0
Median : 60.0
Mean
: 61.9
3rd Qu.: 75.0
Max.
:120.0
NA's
:50
NA's
:5
abus
Min.
:0.000
1st Qu.:0.000
Median :0.000
Mean
:0.278
3rd Qu.:1.000
Max.
:1.000
NA's
:7
ptsd.cons
Min.
:0.000
1st Qu.:0.000
Median :0.000
Mean
:0.216
3rd Qu.:0.000
Max.
:1.000
NA's
:11
grav.cons
Min.
:1.00
1st Qu.:2.00
Median :4.00
Mean
:3.64
3rd Qu.:5.00
Max.
:7.00
NA's
:4
alc.cons
Min.
:0.000
1st Qu.:0.000
Median :0.000
Mean
:0.186
3rd Qu.:0.000
Max.
:1.000
char
rs
Min.
:1.00
Min.
:1.00
1st Qu.:1.00
1st Qu.:1.00
Median :1.00
Median :2.00
Mean
:1.51
Mean
:2.06
3rd Qu.:2.00
3rd Qu.:3.00
Max.
:4.00
Max.
:3.00
NA's
:96
NA's
:103
suicide.s
suicide.hr
Min.
:0.00
Min.
:0.0
1st Qu.:0.00
1st Qu.:0.0
Median :0.00
Median :0.0
Mean
:0.79
Mean
:0.2
3rd Qu.:1.00
3rd Qu.:0.0
Max.
:5.00
Max.
:1.0
NA's
:41
NA's
:39
Par contre, la variable abus est une variable binaire, qui prend les valeurs 0 et 1, et on pourrait dans certains cas
vouloir la traiter comme un facteur en associant les modalits 0 et 1 aux tiquettes Non et Oui an de faciliter
la lecture des tableaux et des graphiques. Ceci peut se raliser laide de la commande factor(), comme dans
lexemple ci-dessous.
2.3
On peut dsigner nimporte quel objet dans un data frame par sa position en termes de n de ligne et de n de
colonne. Par exemple, la profession (colonne n2) du 3me individu (ligne n3) sobtiendra ainsi :
smp[3,2]
## [1] prof.intermediaire
## 8 Levels: agriculteur artisan autre cadre employe ... sans emploi
Il est galement possible dutiliser le nom des variables, la place de leur numro, par exemple smp[3,"prof"],
voire mme le rowname de lunit statistique dintrt, soit ici smp["3","prof"] puisque les rowname sont
simplement constitus des numros de rang des observations dans le data frame.
En dautres termes, un data frame nest rien dautre quune structure tabulaire contenant des variables arranges
en colonnes qui portent des noms (names(), ou plus gnralement colnames()) et des observations en lignes,
elles-mme nommes (rownames()). Considrons lillustration ci-dessous ( gauche) :
3.1
Les chiers R portent lextension .RData ou .rda et peuvent tre lus avec la commande load(). Ils sont gnralement utiles pour sauvegarder des chiers de donnes dans un format compress (prenant moins de place sur le
disque), et plus rapides charger. On peut galement utiliser ce format pour enregistrer nimporte quel objet R (une
variable ou un tableau par exemple), voire plusieurs variables en mme temps. Lorsque la commande load() a t
excute, le nom de la ou des variables sauvegardes dans le chier apparaissent dans lespace de travail, ce que
lon peut vrier en tapant :
ls()
Cest le format utilis par R pour sauvegard lespace de travail lorsque lon ferme une sessions R. Dans ce cas, R
enregistre toutes les variables contenues dans lespace de travail dans un chier nomm .RData (cest donc un
8
chier masqu dans la plupart des explorateurs de chiers). Lorsque lon dmarre R dans un certain rpertoire de
travail, si un tel chier sy trouve prsent, il est automatiquement charg par R.
En fait, plutt que de laisser R enregistrer lespace de travail la n de la session, on peut utiliser la commande
save.image() pour sauvegarder lespace de travail dans un chier spcique.
Historique des commandes. Il est galement possible de sauvegarder lintgralit des commandes
tapes durant une session laide de la commande savehistory().
3.2
Le package foreign dispose de deux commandes permettant de charger des chiers enregistrs au format SPSS
(chier .sav) ou Stata (chier .dta) : read.spss() et read.dta(). Il est ncessaire de charger le package en
tapant
library(foreign)
avant de pouvoir utiliser ces commandes. Dans le cas de SPSS, il est ncessaire de rajouter loption to.data.frame
= TRUE an dobtenir un data frame et non pas simplement une liste de variables.
3.3
Certains packages permettent de se connecter directement sur des bases de donnes de type MySQL ou PostgreSQL
(voire mme MongoDB, Redis, ou sqlite). Dans ce cas, le mode dinteraction avec les donnes est lgrement dirent
car on utilise alors le langage de requte propre au langage, moins dutiliser des packages qui permettent dassurer
la conversion partir des commandes R habituelles telles que subset().
Il existe galement des packages spcialiss dans le chargement et le traitement des chiers de type XML, JSON,
HDF5, etc. Gnralement il sut de chercher sur le site CRAN ou sur http://www.rseek.org.
Il existe bien dautres mthodes pour interagir avec des tableaux de donnes sous R. Citons en particulier trois
situations assez frquentes :
combiner ensemble direntes sources de donnes : pour associer deux tableaux de donnes disposant
dun identicateur commun (par exemple, une colonne avec des identiants uniques pour les individus, le
nom de variable dans chacun des tableaux ntant pas ncessairement le mme), on utilisera la commande
merge() qui permet de fusionner deux data frame A et B en un seul et mme data frame. Selon les options
choisies, all.x = TRUE, all.y = TRUE ou all = TRUE, on conservera toutes les lignes du tableau A
et les colonnes de B seront ajoutes A mme si certaines observations ne sont pas prsentes dans B, ou
cest le tableau B qui servira de base de fusion, ou enn toutes les observations de A et de B seront associes,
mme si elles ne sont pas en compltes correspondance entre les deux tableaux.
aggrger des donnes : partir de donnes individuelles, pour construire des donnes de synthse
(par exemple des moyennes pour chaque groupe) il est possible dutiliser la commande tapply() ou
aggregate(). Cette dernire prsente lavantage de retourner ses rsultats sous forme de data frame,
quil est possible dexploiter ensuite pour continuer les analyses statistiques ou faire des reprsentations
9
graphiques. Le package plyr ou sa version plus rcente, dplyr, fournit des options nettement plus amliores
pour ce type doprations.
transformer des donnes : dans ce qui a t prsent sur les data frame, on considre explicitement que
les valeurs prises par une variables sont regroupes dans une mme colonne, et que donc chaque colonne
reprsente des variables bien distinctes. Il arrive parfois que lon stocke dans chaque colonne dun tableau
les valeurs observes pour chaque modalit ou niveau pris par une variable qualitative (lexemple typique est
une srie de mesures rptes chez les mmes individus trois priodes direntes, et pour lequel on se
retrouve avec un tableau 4 colonnes, ou en plus dune colonne didentiant unique pour les individus, on
dispose de 3 colonnes regroupant les mesures collectes chez chaque individu pour une mme priode). Dans
ce cas, le package reshape2 permet de transformer ce type de tableau, dit en format wide, en un data
frame au format long comprenant trois colonnes : une colonne id dsignant les identiants individus, une
colonne variable contenant les niveaux de la variable manipule (par exemple, priode1, priode2 et
priode3) et une colonne value contenant les mesures associes chaque individu pour chacune des
trois priodes.
Pour plus dinformations, il peut tre utile de consulter lune des rfrences suivantes :
1. Spector, P (2008). Data Manipulation with R. Springer
2. R Cookbook / Manipulating Data
3. Muenchen, B. R for SAS and SPSS Users
10