startR 3: Tableaux de données

Lise Vaudor

21 mars 2017

Lecture de tables: Répertoire de travail

Le répertoire de travail (working directory) est le dossier de votre ordinateur où, sauf précision de votre part, R lit et écrit les fichiers.

Vous pouvez afficher le répertoire de travail de la manière suivante:

getwd()
## [1] "C:/Users/lvaudor/Desktop/FORMATIONS/INITIATION/startR"

Vous pouvez changer de répertoire de travail avec la commande setwd():

setwd("../../GRAPHIQUES_GGPLOT2/")
getwd()
## [1] "C:/Users/lvaudor/Desktop/FORMATIONS/GRAPHIQUES_GGPLOT2"

Remarquez que le chemin est écrit avec des / et non avec des \

Lecture de tables: Fonction read.table()

Examinons la commande suivante:

air <- read.table(file="datasets/air.txt",
                  sep=",",
                  dec=".",
                  header=T)
air[1:3,]  # 3 premieres lignes du tableau
##   Ozone Solar.R Wind Temp Month Day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3

La fonction read.table() permet de lire la table contenue dans le fichier “air.txt” qui se trouve dans le dossier “datasets” du répertoire de travail.

Lecture de tables: Fonction read.table()

Examinons la commande suivante:

air <- read.table(file="datasets/air.txt",
                  sep=",",
                  dec=".",
                  header=T)
air[1:3,]  # 3 premieres lignes du tableau
##   Ozone Solar.R Wind Temp Month Day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3

Il existe de nombreux arguments à cette fonction, qui sont détaillés dans le fichier d’aide associé.

Lecture de tables: Nettoyer ses données!

Attention, utilisateurs de tableurs, cette diapo est pour vous…

Si vous avez des difficultés à lire votre tableau des données, c’est sans doute parce que celui-ci n’est pas un tableau de données brutes.

Pour lire un tableau de données sous R, il convient d’abord de nettoyer ce tableau:

Lecture de tables: en passant par RStudio

On peut également utiliser les fonctionnalités de RStudio pour afficher et modifier la table.

Lecture de tables: attacher/détacher

Pour accéder à une des variables d’un tableau il faut a priori utiliser le système d’indexation (table$variable).

On peut également attacher le tableau de données à l’environnement R pour ne pas avoir à taper le nom du tableau sans arrêt:

attach(air)
Ozone[1:40]
##  [1]  41  36  12  18  NA  28  23  19   8  NA   7  16  11  14  18  14  34
## [18]   6  30  11   1  11   4  32  NA  NA  NA  23  45 115  37  NA  NA  NA
## [35]  NA  NA  NA  29  NA  71

A l’inverse, on peut redétacher une table de la manière suivante:

detach(air)
Ozone[1:40]
## Error in eval(expr, envir, enclos): objet 'Ozone' introuvable

Ecriture de tables: Fonction write.table()

A l’inverse, il est possible d’écrire des fichiers depuis R. Pour écrire une table, par exemple:

t1
##    Espece      Nom Date
## 1   Chien   Lassie 1940
## 2 Dauphin  Flipper 1964
## 3    Chat Garfield 1978
## 4  Eponge      Bob 1999
write.table(t1,
            "table_animaux_stars.csv",
            sep=";",
            col.names=TRUE,
            row.names=FALSE)

Structure et dimensions d’une table

str(air) # structure du tableau
## 'data.frame':    153 obs. of  6 variables:
##  $ Ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
##  $ Solar.R: int  190 118 149 313 NA NA 299 99 19 194 ...
##  $ Wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
##  $ Temp   : int  67 72 74 62 56 66 65 59 61 69 ...
##  $ Month  : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ Day    : int  1 2 3 4 5 6 7 8 9 10 ...
colnames(air) # nom des colonnes
## [1] "Ozone"   "Solar.R" "Wind"    "Temp"    "Month"   "Day"
dim(air) # dimensions
## [1] 153   6
length(air$Ozone) # longueur du vecteur
## [1] 153
nrow(air) # nombre de lignes
## [1] 153
ncol(air) #nombre de colonnes
## [1] 6

RStudio view data

require(dplyr)
## Loading required package: dplyr
## Warning: package 'dplyr' was built under R version 3.2.5
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

dplyr: Introduction()

dplyr est un package qui permet de faire simplement diverses opérations sur les tableaux de données:

dplyr: select()

select() permet de sélectionner des variables

Par exemple, on peut sélectionner des variables de la table air

head(air)
##   Ozone Solar.R Wind Temp Month Day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3
## 4    18     313 11.5   62     5   4
## 5    NA      NA 14.3   56     5   5
## 6    28      NA 14.9   66     5   6

dplyr: select()

select() permet de sélectionner des variables en passant par des fonctions auxiliaires. On peut citer par exemple:

dplyr: filter()

filter() permet de filtrer les lignes du tableau en fonction des valeurs de telle ou telle variable.

Ici, par exemple, on cherche toutes les lignes qui correspondent au mois de juillet:

data <- filter(air,Month==7)
nrow(data)
## [1] 31
head(data)
##   Ozone Solar.R Wind Temp Month Day
## 1   135     269  4.1   84     7   1
## 2    49     248  9.2   85     7   2
## 3    32     236  9.2   81     7   3
## 4    NA     101 10.9   84     7   4
## 5    64     175  4.6   83     7   5
## 6    40     314 10.9   83     7   6

dplyr: arrange()

Pour réarranger un tableau selon l’ordre d’une variable, on peut faire appel à la fonction arrange (ici, par exemple on réordonne air selon l’ordre croissant de Temp et Wind):

data <- arrange(air,Temp, Wind)
head(data)
##   Ozone Solar.R Wind Temp Month Day
## 1    NA      NA 14.3   56     5   5
## 2    NA      NA  8.0   57     5  27
## 3    NA      66 16.6   57     5  25
## 4     6      78 18.4   57     5  18
## 5    18      65 13.2   58     5  15
## 6    NA     266 14.9   58     5  26

dplyr: mutate()

Pour créer de nouvelles variables et les ajouter au tableau de données on peut utiliser la fonction mutate().

Voici par exemple comment procéder si je souhaite créer une nouvelle variable, “Date”, en combinant les variables Month et Day:

data <- mutate(air,Date=paste(Month,"-",Day,sep=""))
head(data)
##   Ozone Solar.R Wind Temp Month Day Date
## 1    41     190  7.4   67     5   1  5-1
## 2    36     118  8.0   72     5   2  5-2
## 3    12     149 12.6   74     5   3  5-3
## 4    18     313 11.5   62     5   4  5-4
## 5    NA      NA 14.3   56     5   5  5-5
## 6    28      NA 14.9   66     5   6  5-6

dplyr: summarise()

Si l’on souhaite calculer quelques statistiques un peu basiques sur un jeu de données, on peut utiliser la fonction summarise().

Par exemple:

data <- summarise(air,
                  mean_Temp=mean(Temp),
                  nb_Mois=n_distinct(Month),
                  nb_Mesures=n())
data
##   mean_Temp nb_Mois nb_Mesures
## 1   25.4902       5        153

dplyr: Chaînage

Vous avez vu que les fonctions de dplyr permettaient de faire toutes sortes d’opérations sur les tableaux de données. Il est bien entendu possible de les combiner pour réaliser des opérations complexes…

Imaginons par exemple que l’on souhaite répondre à une question telle que

“Quelle est la moyenne de concentration en Ozone pour les 10% de jours les plus chauds de l’année?”

Pour répondre à cette question, je pourrais par exemple (il y a en fait plusieurs possibilités):

dplyr: Chaînage

Si je souhaitais réaliser cet enchaînement de commandes en une seule opération, et ainsi éviter la création d’objets intermédiaires data1, data2, etc., voici (classiquement) comment il faudrait procéder:

q <- quantile(air$Temp, 0.9)
data <- summarise(filter(select(air,
                                Ozone,
                                Temp),
                         Temp>=q),
                   mean_Ozone=mean(Ozone, na.rm=TRUE))
data
##   mean_Ozone
## 1   89.61538