2 Introduction

library(kableExtra)
sessionInfo()      # Montre la version de R ou avec la commande R.version
## R version 3.4.0 (2017-04-21)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 16.04.2 LTS
## 
## Matrix products: default
## BLAS: /opt/R/3.4.0/lib/R/lib/libRblas.so
## LAPACK: /opt/R/3.4.0/lib/R/lib/libRlapack.so
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] kableExtra_0.9.0 magick_2.0      
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_1.0.0        rstudioapi_0.8    xml2_1.2.0       
##  [4] knitr_1.20        magrittr_1.5      hms_0.4.2        
##  [7] munsell_0.5.0     rvest_0.3.2       viridisLite_0.3.0
## [10] colorspace_1.3-2  R6_2.2.2          rlang_0.2.2      
## [13] stringr_1.3.1     httr_1.3.1        tools_3.4.0      
## [16] xfun_0.3          png_0.1-7         htmltools_0.3.6  
## [19] yaml_2.2.0        digest_0.6.18     tibble_1.4.2     
## [22] crayon_1.3.4      bookdown_0.9.1    readr_1.1.1      
## [25] evaluate_0.11     rmarkdown_1.11    stringi_1.2.4    
## [28] compiler_3.4.0    pillar_1.3.0      scales_1.0.0     
## [31] pkgconfig_2.0.2

2.1 Changement de répertoire

setwd("~/Desktop/R")  # Pour changer le répertoire par défaut 
getwd()                       # Pour voir le répertoire où l'on se trouve    
list.files()                  # Pour voir les fichiers qu'il y'a dans ce dossier

2.2 Aide

?plot()                       # Obtenir de l'aide sur une commande
help(package=colorspace)      # Lorsqu'il sagit d'un package

Obtenir la liste de toutes les commandes qui contiennent le mot “test”.
On ajoute la fonction head() pour ne voir que les 10 premiers lignes

head(apropos("test"),10)      
##  [1] ".valueClassTest" "ansari.test"     "bartlett.test"  
##  [4] "binom.test"      "Box.test"        "chisq.test"     
##  [7] "cor.test"        "file_test"       "fisher.test"    
## [10] "fligner.test"

Aide des arguments sur les commandes et fonctions

args(read.csv)
## function (file, header = TRUE, sep = ",", quote = "\"", dec = ".", 
##     fill = TRUE, comment.char = "", ...) 
## NULL

Information sur un package

library(dplyr)
library(help="dplyr")

Ou encore, on ajoute la fonction tail() pour ne voir que les 20 dernières lignes

tail(lsf.str("package:dplyr"),20)
##  [1] "tbl_df"            "tbl_nongroup_vars" "tbl_sum"          
##  [4] "tbl_vars"          "tibble"            "top_n"            
##  [7] "transmute"         "transmute_"        "transmute_all"    
## [10] "transmute_at"      "transmute_if"      "tribble"          
## [13] "trunc_mat"         "type_sum"          "ungroup"          
## [16] "union"             "union_all"         "vars"             
## [19] "with_order"        "wrap_dbplyr_obj"

2.3 Installation et chargement de package

install.packages("ggplot2") # Installation du package ggplot2
library(ggplot2)            # Charge la librairie ggplot2

Vérifier l’existance d’un package avant de l’installer.
La fonction require() contrairement à la fonction library() envoie une valeur booléenne

if(!require(dplyr)){
  install.packages("dplyr"); require(dplyr)
}

Pour obtenir la liste des packages chargés sur la session courante

(.packages())
##  [1] "ggplot2"    "dplyr"      "kableExtra" "magick"     "stats"     
##  [6] "graphics"   "grDevices"  "utils"      "datasets"   "methods"   
## [11] "base"
search()
##  [1] ".GlobalEnv"         "package:ggplot2"    "package:dplyr"     
##  [4] "package:kableExtra" "package:magick"     "package:stats"     
##  [7] "package:graphics"   "package:grDevices"  "package:utils"     
## [10] "package:datasets"   "package:methods"    "Autoloads"         
## [13] "package:base"

Vérifier si les packages sont à jour

old.packages()

Mettre à jour les packages

update.packages()

Voir tous les data set de tous les packages

data(package = .packages(all.available = TRUE))

Voir les data set d’un package

library(questionr)
data(package="questionr")

2.4 Données

2.4.1 Données manquantes

Les données manquantes NA (not available) sont considérées comme étant de type logical par R.

x <- NA 
typeof(x)
## [1] "logical"
is.na(x)
## [1] TRUE

2.5 Les vecteurs

c(1, 2, 3)
## [1] 1 2 3

Il est possible d’attribuer un nom aux éléments d’un vecteur, soit lors de la création, soit à posteriori, en utilisant la fonction names().

(a <- c(nom = "Diamban", prenom = "Lamine", annee = "1900"))   
##       nom    prenom     annee 
## "Diamban"  "Lamine"    "1900"
(b <- c("Sow", "Diallo", "1920"))   
## [1] "Sow"    "Diallo" "1920"
names(b) <- c("nom", "prenom", "annee")
b
##      nom   prenom    annee 
##    "Sow" "Diallo"   "1920"

2.5.1 Opération sur les vecteurs

c(1, 2, 3) + c(4, 5, 6)   
## [1] 5 7 9
1:10 + 2                 # ou encore 1:10 + rep(2, 10)   
##  [1]  3  4  5  6  7  8  9 10 11 12
1:10 + 1:5 + c(2, 4)     # vecteurs recyclés 2 et 5 fois
##  [1]  4  8  8 12 12 11 11 15 15 19

2.5.2 Manipulation de vecteurs

x <- c(4,-1,2,-3,6,2)   

seq(1, 9, by = 2)     # Génération de suite de nombre
## [1] 1 3 5 7 9
seq_len(10)           # Génération plus rapide  
##  [1]  1  2  3  4  5  6  7  8  9 10
rep(2, 10)            # Répétition de valeur ou de vecteur  
##  [1] 2 2 2 2 2 2 2 2 2 2
rep(1:3, times = 2, each = 3)
##  [1] 1 1 1 2 2 2 3 3 3 1 1 1 2 2 2 3 3 3
rank(c(4, -1, 2, 6))  # Rang des éléments d'un vecteur   
## [1] 3 1 2 4
which(x < 0)          # Position des valeurs TRUE dans un vecteur booléen   
## [1] 2 4
which.min(x)          # Position du minimum dans un vecteur   
## [1] 4
match(2,x)            # Position de la première occurence d'un élément dans un vecteur
## [1] 3

2.6 Matrices

(X <- matrix(1:6, ncol = 2, nrow = 3))
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
(Y <- matrix(1:6, ncol = 2, nrow = 3, byrow = TRUE))
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
## [3,]    5    6
# Dimensions 
# dim(X)  
# nrow(X); ncol(X)

2.7 Data frame

Création d’une data frame

df <- data.frame(nom = paste0("Diamban.",1:10), 
                 age = sample(20:50,10), 
                 sexe = sample(c("M","F"), 10, replace = TRUE),
                 reside = sample(c("Dakar", "Paris"), 10, replace = TRUE))
df %>% 
  kable(booktab =TRUE)
nom age sexe reside
Diamban.1 34 M Dakar
Diamban.2 22 M Dakar
Diamban.3 38 F Paris
Diamban.4 41 M Paris
Diamban.5 23 M Dakar
Diamban.6 30 M Paris
Diamban.7 25 F Paris
Diamban.8 21 F Paris
Diamban.9 29 F Dakar
Diamban.10 43 F Dakar

Caractéristiques

dim(df)         # dimensions du data frame
## [1] 10  4
nrow(df)        # nombre de lignes
## [1] 10
ncol(df)        # nombre de colonnes
## [1] 4
rownames(df)    # nom des lignes (individus)
##  [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"
colnames(df)    # nomdes colonnes (variables)
## [1] "nom"    "age"    "sexe"   "reside"
# ou encore
names(df)   
## [1] "nom"    "age"    "sexe"   "reside"
# Changer le nom des lignes par des lettres majuscules au lieu des chiffres
rownames(df) <- LETTERS[1:nrow(df)]

Extraction d’éléments ou d’un ensemble d’éléments

df[2]  %>% 
  kable(booktab = TRUE)      # extraire une colonne 
age
A 34
B 22
C 38
D 41
E 23
F 30
G 25
H 21
I 29
J 43
df["age"] %>% 
  kable(booktab = TRUE)      # ou utiliser le nom
age
A 34
B 22
C 38
D 41
E 23
F 30
G 25
H 21
I 29
J 43
df$age
##  [1] 34 22 38 41 23 30 25 21 29 43
df[c(1,3,4)]  %>%  # extraire un ensemble de colonnes ou variables discontinues
  kable(booktab = TRUE)   
nom sexe reside
A Diamban.1 M Dakar
B Diamban.2 M Dakar
C Diamban.3 F Paris
D Diamban.4 M Paris
E Diamban.5 M Dakar
F Diamban.6 M Paris
G Diamban.7 F Paris
H Diamban.8 F Paris
I Diamban.9 F Dakar
J Diamban.10 F Dakar
df[c("age","sexe","reside")] %>% 
  kable(booktab = TRUE)
age sexe reside
A 34 M Dakar
B 22 M Dakar
C 38 F Paris
D 41 M Paris
E 23 M Dakar
F 30 M Paris
G 25 F Paris
H 21 F Paris
I 29 F Dakar
J 43 F Dakar
# Individus de sexe feminin et plus agés que la moyenne
df[df$age > mean(df$age) & df$sexe == "F",] 
##          nom age sexe reside
## C  Diamban.3  38    F  Paris
## J Diamban.10  43    F  Dakar
# ou encore
subset(df,age > mean(age) & sexe == "F") 
##          nom age sexe reside
## C  Diamban.3  38    F  Paris
## J Diamban.10  43    F  Dakar

Ajout d’une nouvelle colonne

df$enfant <- sample(c(0:3), 10, replace = TRUE)   

# De la même manière
# db["enfant"] <- sample(c(0,3), 10, replace = TRUE)
df %>% 
  kable(booktab = TRUE)
nom age sexe reside enfant
A Diamban.1 34 M Dakar 0
B Diamban.2 22 M Dakar 1
C Diamban.3 38 F Paris 1
D Diamban.4 41 M Paris 1
E Diamban.5 23 M Dakar 1
F Diamban.6 30 M Paris 2
G Diamban.7 25 F Paris 0
H Diamban.8 21 F Paris 1
I Diamban.9 29 F Dakar 3
J Diamban.10 43 F Dakar 3

Supression d’une colonne

df <- df[, -4] 
# df$enfant <- NULL
# df["enfant"] <- NULL

df %>% 
  kable(booktab = TRUE)
nom age sexe enfant
A Diamban.1 34 M 0
B Diamban.2 22 M 1
C Diamban.3 38 F 1
D Diamban.4 41 M 1
E Diamban.5 23 M 1
F Diamban.6 30 M 2
G Diamban.7 25 F 0
H Diamban.8 21 F 1
I Diamban.9 29 F 3
J Diamban.10 43 F 3

Suppression de lignes

df <- df[-10,]
df %>% 
  kable(booktab = TRUE)
nom age sexe enfant
A Diamban.1 34 M 0
B Diamban.2 22 M 1
C Diamban.3 38 F 1
D Diamban.4 41 M 1
E Diamban.5 23 M 1
F Diamban.6 30 M 2
G Diamban.7 25 F 0
H Diamban.8 21 F 1
I Diamban.9 29 F 3

rbind() pour fusionner deux data frame / objets dans le sens des lignes.
cbind() pour fusionner deux data frame / objets dans le sens des colonnes.
merge() fonctionne comme cbind mais se base sur la variable dont le nom est commun aux deux data frame.