Lise Vaudor
21 mars 2017
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 \
Vous pouvez également utiliser les fonctionnalités de RStudio pour changer de répertoire de travail.
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.
Le chemin vers le fichier est ici indiqué de manière relative c’est-à-dire qu’on indique comment trouver “air.txt” depuis le répertoire de travail actuel.
Le chemin peut aussi être indiquée de manière absolue, en indiquant le chemin complet depuis la racine:
air <- read.table(file="C:/Users/lvaudor/Desktop/FORMATIONS/INITIATION/startR/datasets/air.txt",
sep=",",
dec=".",
header=T)
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é.
Outre l’argument file qui permet d’indiquer le chemin du fichier à lire, voici quelques uns des arguments les plus importants:
sep=","
), un point-virgule (sep=";"
), une tabulation? (sep="\tab"
), etc.dec=","
ou sep="."
)header=TRUE
) ou non (header=FALSE
)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:
Ceci n’est pas de la donnée brute!
On peut également utiliser les fonctionnalités de RStudio pour afficher et modifier la table.
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
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)
Cette-fois les arguments principaux sont:
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
Pour afficher les premières lignes du tableau:
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
Pour afficher les dernières lignes du tableau:
tail(air)
## Ozone Solar.R Wind Temp Month Day
## 148 14 20 16.6 63 9 25
## 149 30 193 6.9 70 9 26
## 150 NA 145 13.2 77 9 27
## 151 14 191 14.3 75 9 28
## 152 18 131 8.0 76 9 29
## 153 20 223 11.5 68 9 30
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 est un package qui permet de faire simplement diverses opérations sur les tableaux de données:
select()
permet de sélectionner des variables (colonnes)filter()
permet de filtrer les individus (lignes)arrange()
permet de réarranger le tableau selon l’ordre des variablesmutate()
permet de créer et ajouter de nouvelles variables (colonnes)summarise()
permet de résumer plusieurs valeurs en une seuleselect() 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
data <- select(air,Ozone,Wind,Temp)
data[1:2,]
## Ozone Wind Temp
## 1 41 7.4 67
## 2 36 8.0 72
data <- select(air, 1,3,4)
data[1:2,]
## Ozone Wind Temp
## 1 41 7.4 67
## 2 36 8.0 72
data <- select(air,-Month,-Day)
data[1:2,]
## Ozone Solar.R Wind Temp
## 1 41 190 7.4 67
## 2 36 118 8.0 72
select() permet de sélectionner des variables en passant par des fonctions auxiliaires. On peut citer par exemple:
starts_with
pour les variables qui commencent par un texte donnéends_with
pour les variables qui terminent par un texte donnécontains
pour les variables qui contiennent un texte donnéPar exemple:
head(dat_tmp)
## X Y conc_Fe conc_Mg conc_Pb
## 1 -0.07099923 2.981014 2.279312 7.855522 3.673563
## 2 5.53051093 3.417561 2.836930 7.487139 3.582564
## 3 2.52848430 3.567788 2.847776 7.408360 3.206137
## 4 3.54875843 5.139947 2.817021 6.557268 2.733517
## 5 2.33102726 4.312889 2.914908 6.815215 3.330579
## 6 4.74918214 4.428560 2.320642 7.603692 3.180317
data <- select(dat_tmp,starts_with("conc"))
head(data)
## conc_Fe conc_Mg conc_Pb
## 1 2.279312 7.855522 3.673563
## 2 2.836930 7.487139 3.582564
## 3 2.847776 7.408360 3.206137
## 4 2.817021 6.557268 2.733517
## 5 2.914908 6.815215 3.330579
## 6 2.320642 7.603692 3.180317
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
On peut combiner plusieurs conditions logiques (ET logique, par une virgule ou un &, OU logique, par l’opérateur |).
Par exemple,
data <- filter(air, Ozone>100, Wind>5)
data
## Ozone Solar.R Wind Temp Month Day
## 1 115 223 5.7 79 5 30
## 2 108 223 8.0 85 7 25
## 3 110 207 8.0 90 8 9
data <- filter(air, Month==7|Month==8)
nrow(data)
## [1] 62
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
et pour ordonner par ordre décroissant, on utilise* desc():
data <- arrange(air,desc(Temp))
head(data)
## Ozone Solar.R Wind Temp Month Day
## 1 76 203 9.7 97 8 28
## 2 84 237 6.3 96 8 30
## 3 118 225 2.3 94 8 29
## 4 85 188 6.3 94 8 31
## 5 NA 259 10.9 93 6 11
## 6 73 183 2.8 93 9 3
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
air=mutate(air,Temp=(Temp-32)/1.8)
head(air)
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 19.44444 5 1
## 2 36 118 8.0 22.22222 5 2
## 3 12 149 12.6 23.33333 5 3
## 4 18 313 11.5 16.66667 5 4
## 5 NA NA 14.3 13.33333 5 5
## 6 28 NA 14.9 18.88889 5 6
ou si je souhaite calculer des classes de vitesses de vent
data=mutate(air,
gWind=cut(Wind,breaks=quantile(Wind)))
head(data)
## Ozone Solar.R Wind Temp Month Day gWind
## 1 41 190 7.4 19.44444 5 1 (1.7,7.4]
## 2 36 118 8.0 22.22222 5 2 (7.4,9.7]
## 3 12 149 12.6 23.33333 5 3 (11.5,20.7]
## 4 18 313 11.5 16.66667 5 4 (9.7,11.5]
## 5 NA NA 14.3 13.33333 5 5 (11.5,20.7]
## 6 28 NA 14.9 18.88889 5 6 (11.5,20.7]
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
Et surtout, si je souhaite calculer une statistique pour différents groupes (définis ici, par exemple, par la variable Month
), je vais le spécifier dans l’argument spécifiant la table de données, à l’aide de group_by():
data <- summarise(group_by(air,Month),
mean_Temp=mean(Temp),
nb_Mesures=n())
data
## # A tibble: 5 × 3
## Month mean_Temp nb_Mesures
## <int> <dbl> <int>
## 1 5 18.63799 31
## 2 6 26.16667 30
## 3 7 28.83513 31
## 4 8 28.87097 31
## 5 9 24.94444 30
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):
sélectionner les variables qui m’intéressent, à savoir Ozone
et Temp
filtrer pour ne garder que les lignes avec une température supérieure ou égale au quantile d’ordre 90% de Temp
résumer l’information pour obtenir la moyenne de température
Classiquement, pour coder cette chaîne d’opérations sous R, on procéderait de la manière suivante:
q <- quantile(air$Temp, 0.9)
data1 <- select(air, Ozone, Temp)
data2 <- filter(data1, Temp>=q)
data3 <- summarise(data2, mean_Ozone=mean(Ozone, na.rm=TRUE))
data3
## mean_Ozone
## 1 89.61538
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
dplyr
permet d’inverser l’ordre de cette syntaxe en permettant d’utiliser un opérateur (l’opérateur “pipe”) qui s’écrit de la manière suivante : %>% et que l’on pourrait (en gros) traduire par “et puis”…
Voyez plutôt comment le code ci-dessus peut être simplifié par l’usage de cet opérateur:
q <- quantile(air$Temp, 0.9)
data <- air %>%
select(Ozone,Temp) %>%
filter(Temp>=q) %>%
summarise(mean_Ozone=mean(Ozone,na.rm=TRUE))
data
## mean_Ozone
## 1 89.61538