01 février 2021

Structure du cours

cours 1

  • Qu’est-ce que le traitement et l’analyse de données.
  • Qu’est-ce que R et pourquoi l’utiliser ?
  • Travailler sous R : principes et fonctionnements.
  • Premiers pas avec R.

cours 2

  • Faire des calculs avec R.
  • Faire des graphiques avec R.
  • Manipuler des données spatiales dans R.

cours 3

  • Exemple de modélisation sous R.

Qu’est-ce que le traitement et l’analyse de données ?

  • Décrire
  • Analyser
  • Synthétiser
  • Comprendre
  • Présenter

Qu’est-ce que le traitement et l’analyse de données ?

  • Outil essentiel de la recherche empirique
  • Permet de :
    _ mettre en évidence
    _ d’explorer
    _ de décrire
    _ de comparer
    des tendances dans les données

Pourquoi utiliser la programmation ?

  • Rentrer la problématique dans une structure logique et séquentielle.
  • Éviter l’effet de boîte noire des logiciels boutons.

Effet boîte noire

Pourquoi utiliser la programmation ?

  • Rentrer la problématique dans une structure logique et séquentielle.
  • Éviter l’effet de boîte noire des logiciels boutons.
  • Faire de la recherche reproductible et diffusable.

Qu’est-ce que R ?

  • Logiciel de programmation libre
  • Orienté vers le traitement statistique et fontionne avec son propre langage de programmation (langage R)
  • Large communauté d’utilisateurs qui crée de nouvelles bibliothèques de fonctions https://cran.r-project.org/, et gère de nombreux forums d’entraide https://stackoverflow.com/questions/tagged/r
  • Possibilité de passer rapidement du simple utilisateur au développeur

7 niveaux d’utilisation de R

  1. Demander à un collègue de l’utiliser pour vous
  2. Exécuter des fonctions déjà écrites
  3. Combiner des fonctions déjà écrites
  4. Écrire ses propres algorithmes
  5. Écrire ses propres fonctions
  6. Développer un code de qualité
  7. Écrire ses propres bibliothèques de code

Travailler sous R : principes et fonctionnements

Travailler sous R : principes et fonctionnements

  • Pour commencer : ouvrir RStudio !

Les scripts

  • réutilisables
  • plus faciles à utiliser (revenir en arrière, repérer les erreurs)
  • conservent la documentation exacte
  • permettent la reproductibilité de l’analyse
  • permettent le partage de code
  • permettent la génération automatique de rapports

Les scripts : Quelques règles

  • Chaque script correspond à une seule analyse
  • Chaque script à une en-tête contenant les informations importantes : titre, sujet, objectifs, auteur, date, etc…

Les scripts : Quelques règles

  • Chaque script correspond à une seule analyse
  • Chaque script à une en-tête contenant les informations importantes : titre, sujet, objectifs, auteur, date, etc…
############################################
## Thèse Rédaction
## Présentation des données
## détail perles période 5
## preparation
## ========================================
## Projet : these
## Auteur : Lizzie Scholtus
## Version 01
## date création 04/11/20
## date de la dernière modification : 19/10/20
## data : Tout
## data : BDD_V5 export du 05/09/2020 
##############################################

Les scripts : Quelques règles

  • Chaque script correspond à une seule analyse
  • Chaque script à une en-tête contenant les informations importantes : titre, sujet, objectifs, auteur, date, etc…
  • mettre des commentaires pour pouvoir réutiliser les fonctions sans relire la documentation
# Supprimer une ligne
g <- g[!row.names(g) %in% c(164),] # pour supprimer la ligne 164

Les scripts : Quelques règles

  • Utiliser des systèmes de versioning : ajouter des numéros de version ou un système de version contrôle
  • Éviter d’utiliser des caractères spéciaux dans les noms de fichiers et de variable. Dans tous les cas, penser à encoder ses scripts en UTF8
  • Utiliser un style d’écriture fixe (espace entre les opérateurs, underscore pour diviser les noms)
  • Utiliser une structure standardisée de dossier pour séparer les scripts, les données, les résultats

Les scripts : Quelques règles

  • Utiliser une structure standardisée de dossier pour séparer les scripts, les données, les résultats : choisir la structure qui vous convient et la conserver tout le temps
  • Une remarque : R est sensible à la casse, mais pas aux espaces

Les objets et les fonctions

Pour comprendre le fonctionnement du langage R il existe deux slogans :

- Tout ce qui existe est un objet

- Tout ce qui se produit est une fonction

John Chambers

Les types de données dans R

Numeric : variables numériques (qui ne contiennent que des chiffres, que l’on peut calculer)

n <- 1:10 # pour créer un objet comptenant des chiffres
n # pour afficher le contenu de l'objet
##  [1]  1  2  3  4  5  6  7  8  9 10
is.numeric(n) # pour vérifier s'il est bien numérique
## [1] TRUE

Les types de données dans R

Character : variables qualitatives (en général du texte)

c <- c("un","deux","trois") # pour créer un objet contenant 
# des données qualitatives
c # pour afficher le contenu de l'objet
## [1] "un"    "deux"  "trois"
class(c) # pour demander le type de données de l'objet c
## [1] "character"

Les types de données dans R

Logical : correspond à du Oui/Non (souvent utiliser pour stocker résultat d’une question posée dans R)

n
##  [1]  1  2  3  4  5  6  7  8  9 10
l <- n<3 # Lesquels dans n sont supérieurs à 3 ?
l
##  [1]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
class(l)
## [1] "logical"

La structure des données

La structure des données

Les vecteurs : sont des objets à une dimension qui stockent des collections de données d’un même type uniquement

n # est un vecteur numérique
##  [1]  1  2  3  4  5  6  7  8  9 10
c # est un vecteur qualitatif
## [1] "un"    "deux"  "trois"
is.vector(l) # pour vérfier si l est un vecteur
## [1] TRUE

La structure des données

les facteurs : sont des vecteurs qui contiennent des données catégorisées, pour lesquelles il existe un niveau (level)
Elles correspondent par exemple aux réponses fixées dans le cadre d’un sondage.

f # est un vecteur contenant des catégories prédéfinies
##  [1] célibataire   marié         marié         non renseigné veuf         
##  [6] célibataire   divorcé       célibataire   marié         divorcé      
## Levels: célibataire divorcé marié non renseigné veuf
is.factor(f) # pour vérifier si c'est un facteur
## [1] TRUE

La structure des données

les facteurs : sont des vecteurs qui contiennent des données catégorisées, pour lesquelles il existe un niveau (level)
Elles correspondent par exemple aux réponses fixées dans le cadre d’un sondage.

levels(f) # pour observer les différents niveaux
## [1] "célibataire"   "divorcé"       "marié"         "non renseigné"
## [5] "veuf"
table(f) # pour voir le nombre dans chaque niveau
## f
##   célibataire       divorcé         marié non renseigné          veuf 
##             3             2             3             1             1

La structure des données

La structure des données

les matrices : sont des objets à deux dimensions qui stockent des collections de données d’un même type. Elles sont rectangulaires, c’est-à-dire qu’elles ont des rangs et des colonnes.

m <- matrix( 
   c(2, 4, 3, 1, 5, 7), # les données
   nrow = 2,              # nombre de rangs
   ncol = 3,              # nombre de colonnes
   byrow = TRUE)        # remplir la matrice par rang
m # pour afficher la matrice
##      [,1] [,2] [,3]
## [1,]    2    4    3
## [2,]    1    5    7

La structure des données

La structure des données

les tableurs (data frame) : correspondent aux feuilles de calcul des logiciels de tableurs. Leur structure correspond aux matrices, mais les colonnes peuvent contenir des types de données différents.

d <- read.csv("SIT_corpus.csv", header = TRUE, sep = ";", encoding = "UTF-8", na.strings = "")
# pour ouvrir un tableur au format .csv
head(d) # pour afficher les 6 premiers enregistrements
##   ID_SITE          Lieu.dit                   Commune             Region
## 1 SIT0001 Wederath-Belginum                  Wederath Rhénanie Palatinat
## 2 SIT0002     Cherain-Brisy                   Cherain           Wallonie
## 3 SIT0003     Han-sur-Lesse             Han-sur-Lesse           Wallonie
## 4 SIT0004      Klosteräcker      Breisach-Hochstetten    Bade-Wurtemberg
## 5 SIT0005       Münsterberg                  Breisach    Bade-Wurtemberg
## 6 SIT0006          Kegelriß Ehrenkirchen-Ehrenstetten    Bade-Wurtemberg
##        Pays Longitude        Latitude
## 1 Allemagne  7.164440        49.86499
## 2  Belgique  5.865210        50.17996
## 3  Belgique  5.186230        50.12674
## 4 Allemagne  7.625970        48.02291
## 5 Allemagne  7.579663 48.029305356669
## 6 Allemagne  7.776640 47.898463213428

La structure des données

str(d)
## 'data.frame':    1044 obs. of  7 variables:
##  $ ID_SITE  : chr  "SIT0001" "SIT0002" "SIT0003" "SIT0004" ...
##  $ Lieu.dit : chr  "Wederath-Belginum" "Cherain-Brisy" "Han-sur-Lesse" "Klosteräcker" ...
##  $ Commune  : chr  "Wederath" "Cherain" "Han-sur-Lesse" "Breisach-Hochstetten" ...
##  $ Region   : Factor w/ 33 levels "Aargau","Alsace",..: 22 31 31 4 4 4 4 4 22 22 ...
##  $ Pays     : Factor w/ 5 levels "Allemagne","Belgique",..: 1 2 2 1 1 1 1 1 1 1 ...
##  $ Longitude: num  7.16 5.87 5.19 7.63 7.58 ...
##  $ Latitude : num  49.9 50.2 50.1 48 48 ...

La structure des données

summary(d)
##    ID_SITE            Lieu.dit           Commune         
##  Length:1044        Length:1044        Length:1044       
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
##                                                          
##                 Region            Pays       Longitude        Latitude    
##  Lorraine          :318   Allemagne :351   Min.   :4.920   Min.   :46.23  
##  Rhénanie Palatinat:233   Belgique  :  5   1st Qu.:6.090   1st Qu.:48.09  
##  Alsace            :114   France    :523   Median :6.784   Median :48.95  
##  Franche-Comté     : 93   Luxembourg: 66   Mean   :6.887   Mean   :48.75  
##  Bade-Wurtemberg   : 73   Suisse    : 99   3rd Qu.:7.667   3rd Qu.:49.53  
##  (Other)           :206                    Max.   :9.423   Max.   :50.44  
##  NA's              :  7                                    NA's   :1

La structure des données

les listes : sont des collections ordonnées d’objets, dont les éléments peuvent être de différents types

La structure des données

les listes

L <- list(d, m, c, f) # création d'une liste
str(L)
## List of 4
##  $ :'data.frame':    1044 obs. of  7 variables:
##   ..$ ID_SITE  : chr [1:1044] "SIT0001" "SIT0002" "SIT0003" "SIT0004" ...
##   ..$ Lieu.dit : chr [1:1044] "Wederath-Belginum" "Cherain-Brisy" "Han-sur-Lesse" "Klosteräcker" ...
##   ..$ Commune  : chr [1:1044] "Wederath" "Cherain" "Han-sur-Lesse" "Breisach-Hochstetten" ...
##   ..$ Region   : Factor w/ 33 levels "Aargau","Alsace",..: 22 31 31 4 4 4 4 4 22 22 ...
##   ..$ Pays     : Factor w/ 5 levels "Allemagne","Belgique",..: 1 2 2 1 1 1 1 1 1 1 ...
##   ..$ Longitude: num [1:1044] 7.16 5.87 5.19 7.63 7.58 ...
##   ..$ Latitude : num [1:1044] 49.9 50.2 50.1 48 48 ...
##  $ : num [1:2, 1:3] 2 1 4 5 3 7
##  $ : chr [1:3] "un" "deux" "trois"
##  $ : Factor w/ 5 levels "célibataire",..: 1 3 3 4 5 1 2 1 3 2

La structure des données

les listes

L2 <- list(L, n, l) # création d'une liste avec une liste
str(L2)
## List of 3
##  $ :List of 4
##   ..$ :'data.frame': 1044 obs. of  7 variables:
##   .. ..$ ID_SITE  : chr [1:1044] "SIT0001" "SIT0002" "SIT0003" "SIT0004" ...
##   .. ..$ Lieu.dit : chr [1:1044] "Wederath-Belginum" "Cherain-Brisy" "Han-sur-Lesse" "Klosteräcker" ...
##   .. ..$ Commune  : chr [1:1044] "Wederath" "Cherain" "Han-sur-Lesse" "Breisach-Hochstetten" ...
##   .. ..$ Region   : Factor w/ 33 levels "Aargau","Alsace",..: 22 31 31 4 4 4 4 4 22 22 ...
##   .. ..$ Pays     : Factor w/ 5 levels "Allemagne","Belgique",..: 1 2 2 1 1 1 1 1 1 1 ...
##   .. ..$ Longitude: num [1:1044] 7.16 5.87 5.19 7.63 7.58 ...
##   .. ..$ Latitude : num [1:1044] 49.9 50.2 50.1 48 48 ...
##   ..$ : num [1:2, 1:3] 2 1 4 5 3 7
##   ..$ : chr [1:3] "un" "deux" "trois"
##   ..$ : Factor w/ 5 levels "célibataire",..: 1 3 3 4 5 1 2 1 3 2
##  $ : int [1:10] 1 2 3 4 5 6 7 8 9 10
##  $ : logi [1:10] TRUE TRUE FALSE FALSE FALSE FALSE ...

Les fonctions

Une section nommée d’un programme qui accomplit une tâche spécifique

L <- list(n, m) # où list est une fonction

Une fonction est une procédure ou une routine

La plupart des langages de programmation sont fournis avec des fonctions pré-installées qui sont rangées dans des librairies

Les fonctions

Dans R il est possible de télécharger des librairies contenant des fonctions spécifiques

install.packages("ggplot2") # pour installer ggplot2 qui contient des fonctions
# de visualisation de données
library(ggplot2) # pour faire appel à la librairie ggplot2

Il est aussi possible d’écrire ses propres fonctions

effectif <- function(d){
  td <- table(d$CT)
  td <- as.data.frame(td)
  return(td)}

Les fonctions

Pour utiliser et adapter une nouvelle fonction :

  • Utiliser la fonction d’aide
help("table")
?table

Les fonctions

Pour utiliser et adapter une nouvelle fonction :

  • Utiliser la fonction d’aide
  • lire le manuel
  • L’essayer et modifier les données pour voir comment elle fonctionne

Les opérateurs

Opérateurs arithmétiques

+ : addition
- : soustraction
** : multiplication
/ : division
^ ou ** : exponentiel
% : modulus
%in% : trouve les valeurs correspondantes entre deux vecteurs et retourne un vecteur indiquant leur position

Opérateurs logiques

< : moins que
<= : moins que ou égal à
> : plus grand que
>= : plus grand que ou égal à
== : exactement égal à
!= : n’est pas égal à
!x : n’est pas “x”
x & y : x ET y
x | y : x ET/OU y

Maintenant entrons dans le vif du sujet !!

Première étape : où se trouve le projet ?

# première solution :
wd <- "C:/Users/Lizzie/Documents/These/THE_Code"
setwd(wd)
# ou directement
setwd("C:/Users/Lizzie/Documents/These/THE_Code")
# ou encore (uniquement pour Windows)
setwd("C:\\Users\\Lizzie\\Documents\\These\\THE_Code")

Pour accéder à un dossier dans le dossier du projet :

load("/01Data/donnees.RData")

Le langage R : les objets

Créer un objet :

vec1 <- 5 # "<-" assigne 5 à vec1
vec2 = c(4,10,3) # c() correspond à "combine" (combiner)
"texte" -> vec3
vec3
## [1] "texte"
vec2_2 <- c(vec2, 8, 1, 4) # pour ajouter des éléments à un vecteur existant
vec2_2
## [1]  4 10  3  8  1  4
vec3_2 <- c(vec3, "plus","de texte")
vec3_2
## [1] "texte"    "plus"     "de texte"

Le langage R : les fonctions

Utiliser une fonction :

seq(10) # seq() est une fonction !
##  [1]  1  2  3  4  5  6  7  8  9 10
1:10 # correspond à la même chose
##  [1]  1  2  3  4  5  6  7  8  9 10
vec4 <- seq(10) # pour stocker le résultat de la fonction

Le langage R : les fonctions

Utiliser une fonction avec des paramètres :

vec5 <- seq(1, 9, by = 0.1) # seq("from", "to", by = "steps")
# seq("depuis", "jusqu'à", by = "intervale")
vec5
##  [1] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8
## [20] 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7
## [39] 4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5 6.6
## [58] 6.7 6.8 6.9 7.0 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 8.0 8.1 8.2 8.3 8.4 8.5
## [77] 8.6 8.7 8.8 8.9 9.0

Le langage R : les vecteurs

Sélectionner des morceaux d’un vecteur

vec4[c(1:4)] # affiche vec4[éléments 1 à 4]
## [1] 1 2 3 4
vec5[c(1,5,7)] # affiche vec5[éléments 1, 5 et 7]
## [1] 1.0 1.4 1.6
vec3_2[3] # affiche vec3_2[élement 3]
## [1] "de texte"
v <- c(vec3_2[3], vec4[c(1:4)]) # possible de stocker ces éléments dans un nouvel objet
v
## [1] "de texte" "1"        "2"        "3"        "4"
is.numeric(v)
## [1] FALSE
is.character(v)
## [1] TRUE

Le langage R : les vecteurs

Voir le détail d’un vecteur

typeof(vec4) # quel type ?
## [1] "integer"
length(vec4) # combien d'éléments ?
## [1] 10
attributes(vec4) # est-ce qu'il y a des métadonnées ?
## NULL

Le langage R : les tableurs

Ouvrir un tableur :

d <- read.csv("SIT_corpus.csv", header = TRUE, sep = ";", encoding = "UTF-8", na.strings = "")
# voir ?read.table pour plus d'informations

Créer un tableur :

df <- data.frame(n, f, l)
class(df)
## [1] "data.frame"
str(df)
## 'data.frame':    10 obs. of  3 variables:
##  $ n: int  1 2 3 4 5 6 7 8 9 10
##  $ f: Factor w/ 5 levels "célibataire",..: 1 3 3 4 5 1 2 1 3 2
##  $ l: logi  TRUE TRUE FALSE FALSE FALSE FALSE ...

Le langage R : les tableurs

Enregister le tableur

write.table(df, file = "nom_fichier.csv", quote = FALSE, sep = ";", na = "NA",
            dec = ".", row.names = FALSE, col.names = TRUE)

Autres format que .csv :
- Excel : library(xlsx)
- SQLite : library(RSQLite)
- PostGreSQL : library(RPostgreSQL)

Quelques règles pour le traitement de données

  • Ne jamais modifier les données sources !
  • Toujours vérifier que le jeu de données est bien importé
  • Enregistrer les nouveaux jeu de données si nécessaire en .csv

Le langage R : les tableurs

Il est possible de renommer les colonnes d’un tableur soit directemment à sa création, soit après

# nommer les colonnes lors de la création
df1 <- data.frame("ID" = n, "Statut" = f, 
                  "Enfant" = l)
df1
##    ID        Statut Enfant
## 1   1   célibataire   TRUE
## 2   2         marié   TRUE
## 3   3         marié  FALSE
## 4   4 non renseigné  FALSE
## 5   5          veuf  FALSE
## 6   6   célibataire  FALSE
## 7   7       divorcé  FALSE
## 8   8   célibataire  FALSE
## 9   9         marié  FALSE
## 10 10       divorcé  FALSE
# nommer les colonnes par la suite
names(df) <- c("ID", "Statut", "Enfant")
df
##    ID        Statut Enfant
## 1   1   célibataire   TRUE
## 2   2         marié   TRUE
## 3   3         marié  FALSE
## 4   4 non renseigné  FALSE
## 5   5          veuf  FALSE
## 6   6   célibataire  FALSE
## 7   7       divorcé  FALSE
## 8   8   célibataire  FALSE
## 9   9         marié  FALSE
## 10 10       divorcé  FALSE

Le langage R : les tableurs

Pour séléctionner des éléments d’un tableur la syntaxe est : tableur[rang, colonne]

df[4, 2] # affiche le rang 4 et la colonne 2 du tableur df
## [1] non renseigné
## Levels: célibataire divorcé marié non renseigné veuf
df[,2] # affiche toute la colonne 2
##  [1] célibataire   marié         marié         non renseigné veuf         
##  [6] célibataire   divorcé       célibataire   marié         divorcé      
## Levels: célibataire divorcé marié non renseigné veuf
df[4,] # affiche tout le rang 4
##   ID        Statut Enfant
## 4  4 non renseigné  FALSE
df[4:8,2] # affiche les rangs 4 à 8 pour la colonne 2
## [1] non renseigné veuf          célibataire   divorcé       célibataire  
## Levels: célibataire divorcé marié non renseigné veuf
df[4, 2:3] # affiche le rang 4 pour les colonnes 2 à 3
##          Statut Enfant
## 4 non renseigné  FALSE
df$Statut # affiche la colonne Statut du tableur df
##  [1] célibataire   marié         marié         non renseigné veuf         
##  [6] célibataire   divorcé       célibataire   marié         divorcé      
## Levels: célibataire divorcé marié non renseigné veuf
ID4 <- df[4,] # pour stocker les données du rang 4 dans un nouvel objet

Le langage R : les valeurs manquantes

Quand pour quelques raisons que ce soit l’objet contient des valeurs vides, elles sont indiquées par la mention NA (data Not Available)

df$Age <- c(30, 42, NA, 27, 59, NA, 23, 36, NA, 75)
head(df)
##   ID        Statut Enfant Age
## 1  1   célibataire   TRUE  30
## 2  2         marié   TRUE  42
## 3  3         marié  FALSE  NA
## 4  4 non renseigné  FALSE  27
## 5  5          veuf  FALSE  59
## 6  6   célibataire  FALSE  NA
anyNA(df) # indique s'il y a des éléments manquants
## [1] TRUE
is.na(df) # indique quels éléments sont manquants
##          ID Statut Enfant   Age
##  [1,] FALSE  FALSE  FALSE FALSE
##  [2,] FALSE  FALSE  FALSE FALSE
##  [3,] FALSE  FALSE  FALSE  TRUE
##  [4,] FALSE  FALSE  FALSE FALSE
##  [5,] FALSE  FALSE  FALSE FALSE
##  [6,] FALSE  FALSE  FALSE  TRUE
##  [7,] FALSE  FALSE  FALSE FALSE
##  [8,] FALSE  FALSE  FALSE FALSE
##  [9,] FALSE  FALSE  FALSE  TRUE
## [10,] FALSE  FALSE  FALSE FALSE
is.na(df$Age)
##  [1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
table(is.na(df$Age)) # table compte le nombre d'occurence
## 
## FALSE  TRUE 
##     7     3
na.omit(df) # enlève les données incomplètes
##    ID        Statut Enfant Age
## 1   1   célibataire   TRUE  30
## 2   2         marié   TRUE  42
## 4   4 non renseigné  FALSE  27
## 5   5          veuf  FALSE  59
## 7   7       divorcé  FALSE  23
## 8   8   célibataire  FALSE  36
## 10 10       divorcé  FALSE  75

le langage R : manipuler des jeux de données

Chercher des doublons

duplicated(f) # trouve les éléments identiques dans un objet
##  [1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE
any(duplicated(f))
## [1] TRUE
unique(f) # enlève les duplicatat d'un objet
## [1] célibataire   marié         non renseigné veuf          divorcé      
## Levels: célibataire divorcé marié non renseigné veuf
f
##  [1] célibataire   marié         marié         non renseigné veuf         
##  [6] célibataire   divorcé       célibataire   marié         divorcé      
## Levels: célibataire divorcé marié non renseigné veuf

le langage R : manipuler des jeux de données

Trier les données

n
##  [1]  1  2  3  4  5  6  7  8  9 10
sort(n, decreasing = TRUE) # trie un vecteur 
##  [1] 10  9  8  7  6  5  4  3  2  1
df
##    ID        Statut Enfant Age
## 1   1   célibataire   TRUE  30
## 2   2         marié   TRUE  42
## 3   3         marié  FALSE  NA
## 4   4 non renseigné  FALSE  27
## 5   5          veuf  FALSE  59
## 6   6   célibataire  FALSE  NA
## 7   7       divorcé  FALSE  23
## 8   8   célibataire  FALSE  36
## 9   9         marié  FALSE  NA
## 10 10       divorcé  FALSE  75
df[order(df$Age), ] # trie un tableur
##    ID        Statut Enfant Age
## 7   7       divorcé  FALSE  23
## 4   4 non renseigné  FALSE  27
## 1   1   célibataire   TRUE  30
## 8   8   célibataire  FALSE  36
## 2   2         marié   TRUE  42
## 5   5          veuf  FALSE  59
## 10 10       divorcé  FALSE  75
## 3   3         marié  FALSE  NA
## 6   6   célibataire  FALSE  NA
## 9   9         marié  FALSE  NA

le langage R : manipuler des jeux de données

Réagencer des colonnes

prf <- as.factor(c(rep("commerçant", 3), "ouvrier", rep("fonctionnaire", 6)))
df2 <- cbind(df, prf) # colle les colonnes si même nombre de rang
df2
##    ID        Statut Enfant Age           prf
## 1   1   célibataire   TRUE  30    commerçant
## 2   2         marié   TRUE  42    commerçant
## 3   3         marié  FALSE  NA    commerçant
## 4   4 non renseigné  FALSE  27       ouvrier
## 5   5          veuf  FALSE  59 fonctionnaire
## 6   6   célibataire  FALSE  NA fonctionnaire
## 7   7       divorcé  FALSE  23 fonctionnaire
## 8   8   célibataire  FALSE  36 fonctionnaire
## 9   9         marié  FALSE  NA fonctionnaire
## 10 10       divorcé  FALSE  75 fonctionnaire

le langage R : manipuler des jeux de données

Rajouter des rangs

df3 <- data.frame(ID = c(11:13), Statut = c(NA, "veuf", "divorcé"), 
                  Enfant = c(TRUE, TRUE, FALSE), Age = c(44, 80, 52))
df4 <- rbind(df, df3) # colle les rangs si exacte même colonnes
df4
##    ID        Statut Enfant Age
## 1   1   célibataire   TRUE  30
## 2   2         marié   TRUE  42
## 3   3         marié  FALSE  NA
## 4   4 non renseigné  FALSE  27
## 5   5          veuf  FALSE  59
## 6   6   célibataire  FALSE  NA
## 7   7       divorcé  FALSE  23
## 8   8   célibataire  FALSE  36
## 9   9         marié  FALSE  NA
## 10 10       divorcé  FALSE  75
## 11 11          <NA>   TRUE  44
## 12 12          veuf   TRUE  80
## 13 13       divorcé  FALSE  52

le langage R : manipuler des jeux de données

Fusionner des jeux de données qui ont en communs des noms de colonnes ou de rangs

df5 <- data.frame(ID = c(1:10), prf = prf, Ville = c(rep("Strasbourg", 3),
                                                     rep("Paris", 4),
                                                     "Marseille", "Lyon", "Besançon"))
df5
##    ID           prf      Ville
## 1   1    commerçant Strasbourg
## 2   2    commerçant Strasbourg
## 3   3    commerçant Strasbourg
## 4   4       ouvrier      Paris
## 5   5 fonctionnaire      Paris
## 6   6 fonctionnaire      Paris
## 7   7 fonctionnaire      Paris
## 8   8 fonctionnaire  Marseille
## 9   9 fonctionnaire       Lyon
## 10 10 fonctionnaire   Besançon
df6 <- merge(df, df5, by = "ID") # fusionne les jeux en fonction de ID
df6
##    ID        Statut Enfant Age           prf      Ville
## 1   1   célibataire   TRUE  30    commerçant Strasbourg
## 2   2         marié   TRUE  42    commerçant Strasbourg
## 3   3         marié  FALSE  NA    commerçant Strasbourg
## 4   4 non renseigné  FALSE  27       ouvrier      Paris
## 5   5          veuf  FALSE  59 fonctionnaire      Paris
## 6   6   célibataire  FALSE  NA fonctionnaire      Paris
## 7   7       divorcé  FALSE  23 fonctionnaire      Paris
## 8   8   célibataire  FALSE  36 fonctionnaire  Marseille
## 9   9         marié  FALSE  NA fonctionnaire       Lyon
## 10 10       divorcé  FALSE  75 fonctionnaire   Besançon

le langage R : les boucles

Les boucles sont utilisées pour répéter un argument un nombre de fois défini

a <- 1
for (i in 1:20){
  a <- a+a
}
a
## [1] 1048576
for (i in 1:length(df6[,1])){
  df6$tp_retraite[i] <- 65-df6[i,4] # soustrait l'âge de chaque individu à 65 et
  # le stocke dans une nouvelle colonne
}
df6
##    ID        Statut Enfant Age           prf      Ville tp_retraite
## 1   1   célibataire   TRUE  30    commerçant Strasbourg          35
## 2   2         marié   TRUE  42    commerçant Strasbourg          23
## 3   3         marié  FALSE  NA    commerçant Strasbourg          NA
## 4   4 non renseigné  FALSE  27       ouvrier      Paris          38
## 5   5          veuf  FALSE  59 fonctionnaire      Paris           6
## 6   6   célibataire  FALSE  NA fonctionnaire      Paris          NA
## 7   7       divorcé  FALSE  23 fonctionnaire      Paris          42
## 8   8   célibataire  FALSE  36 fonctionnaire  Marseille          29
## 9   9         marié  FALSE  NA fonctionnaire       Lyon          NA
## 10 10       divorcé  FALSE  75 fonctionnaire   Besançon         -10

le langage R : les boucles

Il existe aussi des boucles restrictives

i <- 1
a <- 1

while(a<55) {
  a <- a+a
  i=i+1
}
a
## [1] 64
i
## [1] 7

Ne pas paniquer !

  • Comprendre les concepts
  • Adapter les méthodes et techniques
  • se rapprocher d’experts
  • se créer une communauté
  • Développer un réseau de chercheurs
  • Participer à des projets collaboratifs

Résumé

Ce qu’il faut essentiellement retenir c’est la grammaire de R :

OBJET <- FONCTION(objet sur lequel s’applique la fonction, paramètres)

Les TYPES de données

Les CLASSES d’objets

Pour le reste, il y a l’aide et internet !!