Vous êtes sur la page 1sur 63

PRISE EN MAIN DU LOGICIEL R

ET MANIPULATION D'OBJETS

Master Epidémiologie et Surveillance des Maladies Infectieuses Humaines et Animales

Maud Marsot (maud.marsot@anses.fr)


Unité EpiMIM - Laboratoire de Santé Animale - ANSES
Objectifs cours R

Prise en main du logiciel R


RStudio
Packages
Calculatrice

Manipulation d’objets
Types d’objets et classes
Boucles et fonction

Importation et manipulation d’un fichier de données


Importation (et exportation) d’un fichier
Description et nettoyage du fichier
Gestion dates et chaînes de caractères
Transformation et combinaison de variables

2
Qu’est-ce que R ?

R est un logiciel et un langage de programmation


– logiciel libre (gratuit et participatif)
– très flexible : chacun peut personnaliser ses méthodes d'analyse

Que faire avec R ?


– opérations mathématiques
– manipulation et visualisation de données
– analyses statistiques (tests, régression…)
– graphiques et cartes
– simulations (modélisation dynamique)

3
Rstudio = interface
barre de menu
boutons

script R exécution objets enregistrés

graphiques packages

console

invite de commande

4
Les packages

Que faire si besoins particuliers ?

Packages
http://cran.r-project.org/web/packages

5
Les packages

Un package = une thématique particulière + fonctions associées


exemple : epitools (outils en épidémiologie)

~ 19708 packages

Pour télécharger un package :

- cliquez sur l’onglet « Install Packages »


- écrivez le nom du package à installer
- cliquez sur « Install »

6
Les packages
Pour télécharger un package :

7
Les packages

Le package est installé (pour toujours)


Autre option : via un fichier zip

Pour être fonctionnel : besoin d’être activé à chaque session


• taper dans la console : library(epitools)
• ou cliquez sur « Packages », « Charger le package » et choisir dans la liste
le package à activer
Maintenant, toutes les fonctions du package « epitools » peuvent être
utilisées.

Quand on installe un package, il est préférable


de télécharger son manuel

8
Les packages
Pour télécharger le manuel d’un package :

9
Aide sur R

Personne ne maîtrise complètement R !

Aide en ligne :
?mean ou help(mean)
Help.search("mean" ) Forum :
http://forums.cirad.fr/logiciel-R/

Sites internet :
http://www.duclert.org/Aide-memoire-R/Le-langage/Introduction.php
http://cran.r-project.org/doc/manuals/R-intro.pdf
http://cran.r-project.org/doc/contrib/Paradis-rdebuts_fr.pdf (E. Paradis)
https://abcdr.guyader.pro/
http://eric.univ-lyon2.fr/~ricco/cours/cours_programmation_R.html
et bien d’autres…

10
Quelques livres sur R

11
R = calculatrice

 Calculs simples et fonctions :

respecter la casse !

quand expression incomplète (par exemple


parenthèse manquante), le signe + apparaît

12
Créer une variable

 Utiliser le signe = (ou <-) pour l’affectation

 Opération entre les variables

13
Créer une variable

 Fonction ls() : permet d’afficher une liste des objets en mémoire

 Ou regarder dans la zone Environnement

environnement

14
Les objets sous R

Objets Définition

vector variable contenant une ou plusieurs valeurs

data.frame tableau de données avec des lignes et des colonnes

matrix tableau à 2 dimensions

list ensemble d’objets de n’importe quel type

15
Les classes des objets

Classe Définition

numeric variable quantitative

factor variable qualitative

logical FALSE/TRUE

character chaîne de caractères

Date variable sous format de date

16
Les classes des objets

 Fonction pour interroger la classe d’un objet


class()
is.numeric(), is.factor(), …

 Fonction pour modifier la classe d’un objet


as.numeric(), as.factor(), …

17
Créer un vecteur

Vecteur : variable contenant une ou plusieurs valeurs


exemple : âge de six patients d’une étude
données : 24, 28, 41, 29, 25 et 35 ans

• Fortement recommandé d'utiliser des noms explicites pour les


variables
• Les noms de variables ne peuvent pas commencer par un chiffre ou
un caractère spécial
• Attention à la casse !

18
Manipuler un vecteur

• Nommer les éléments d’un vecteur


Exemple : nom des six patients

• Sélectionner une partie d’un vecteur


âge de Lola :

âge des patients 3 à 5 :


âge de tous sauf le premier :

19
Manipuler un vecteur

• Sélectionner une partie d’un vecteur

Patients qui ont moins de 30 ans :

On conserve les données dans un nouveau vecteur :

20
Autres manières de créer un vecteur

• Séquences

• Répétitions

21
Application 1
1. Démarrer Rstudio, créer un nouveau script dans l’onglet File 
New File  R Script et enregistrer ce script avec l’onglet File  Save
As… en lui donnant le nom « Application1 » (l’extension du fichier
enregistré est .R).

2. Installer et activer le package MASS

3. Créer le vecteur x contenant les valeurs : {1, 18, 2, 1, 5, 2, 6, 1, 12,


20}

4. Afficher :
- le deuxième élément de x ;
- les cinq premiers éléments de x ;
- les éléments de x strictement supérieurs à 15 ;
- tous les éléments de x sauf les éléments en positions 2, 4 et 10.

22
Créer un tableau de données (data.frame)

• Tableau des patients


Age Poids Taille
35 60 1,72
49 95 1,87
50 75 1,72
29 55 1,59
30 72 1,73
45 69 1,64

23
Manipuler une table de données
• Premières lignes du tableau :

• Dernières lignes du tableau :

• Type des colonnes du tableau :

24
Manipuler une table de données
• Créer un vecteur à partir d’une colonne de la table :

• Dimensions de la table :

• Statistiques résumées :

25
Manipuler une table de données

• Sélectionner une partie des données :


 Pour afficher le poids de la 4ème personne :

 Pour afficher âge, poids et taille de la 2ème personne :


Ne pas oublier la virgule !

 Combien mesure la personne qui pèse 69 kg ?

Comparaison (≠ attribution =/<- )


différence « != »
“which” donne l’indice qui
répond à la condition
26
Manipuler une table de données

• Sélectionner une partie des données :


 On sélectionne les sujets de 35 ans et moins :

ou :

 On sélectionne les moins de 35 ans pesant plus de 65kg :

ou :

27
Manipuler une table de données

• Ajout d’une colonne :


On veut ajouter l’indice de masse corporelle (IMC = Poids / Taille2)

ou

28
Manipuler une table de données

• Ajout d’une ligne :


On veut ajouter un patient de 42 ans, qui pèse 72 kg et qui mesure
1,68m et d’IMC 25,51

29
Manipuler une table de données

• Package dplyr (fait partie de tidyverse):


 Format tibble (extension du data.frame)
 Fonctions filter, select, mutate, %>%, group_by, summarise

filter : sélectionne des lignes d’un tableau de données selon une


condition. On lui passe en paramètre un test, et seules les lignes pour
lesquelles ce test renvoie TRUE (vrai) sont conservées.

On veut sélectionner les vols du mois de janvier, on peut filtrer sur la


variable month

30
Manipuler une table de données

• Package dplyr (fait partie de tidyverse):


 Format tibble (extension du data.frame)
 Fonctions filter, select, mutate, %>%, group_by, summarise

select : sélectionne des colonnes d’un tableau de données

On veut sélectionner les colonnes lat et long du tableau airports

31
Manipuler une table de données

• Package dplyr (fait partie de tidyverse):


 Format tibble (extension du data.frame)
 Fonctions filter, select, mutate, %>%, group_by, summarise

mutate : permet de créer de nouvelles colonnes dans le tableau de


données, en général à partir de variables existantes

la table airports contient l’altitude de l’aéroport en pieds. On veut créer


une nouvelle variable alt_m avec l’altitude en mètres

32
Manipuler une table de données

• Package dplyr (fait partie de tidyverse):


 Format tibble (extension du data.frame)
 Fonctions filter, select, mutate, %>%, group_by, summarise

%>% = pipe : si j’exécute expr %>% f, alors le résultat de l’expression


expr, à gauche du pipe, sera passé comme premier argument à la
fonction f, à droite du pipe, ce qui revient à exécuter f(expr)
 possibilité d’enchaîner les pipes

Expressions équivalentes :

33
Manipuler une table de données

• Package dplyr (fait partie de tidyverse):


 Format tibble (extension du data.frame)
 Fonctions filter, select, mutate, %>%, group_by, summarise

group_by : permet de définir des groupes de lignes à partir des


valeurs d’une ou plusieurs colonnes

On peut grouper les vols selon leur mois dans le tableau fligths

34
Manipuler une table de données

• Package dplyr (fait partie de tidyverse):


 Format tibble (extension du data.frame)
 Fonctions filter, select, mutate, %>%, group_by, summarise

summarise : permet d’agréger les lignes du tableau en effectuant une


opération résumée sur une ou plusieurs colonnes

On souhaite connaître les retards moyens au départ et à l’arrivée pour


l’ensemble des vols du tableau flights

35
Autres types d’objets

• matrix():
 vecteur qui possède un argument supplémentaire (dim) qui est un
vecteur numérique de longueur 2 et qui définit les nombres de lignes
et de colonnes de la matrice
 tableau à 2 dimensions

Toutes les colonnes ont la même longueur (= data.frame)


Toutes les colonnes ont la même classe (≠ data.frame)
mode : numeric, character, logical

36
Autres types d’objets

• list():
 Un objet qui peut contenir des éléments de différentes classes

37
Application 2
Le jeu de données Animals (disponible dans le package MASS) présente le poids du
corps moyen (en kg) et le poids du cerveau moyen (en g) de 28 espèces.
1. Charger le package MASS puis le jeu de données en utilisant la commande :
data(Animals).
2. Afficher les 10 premières lignes du jeu de données. Combien d’espèces ont été
étudiées ?
3. Créer une colonne avec le nom des animaux à partir des noms de lignes (le nom
des animaux est en anglais et correspond au nom des lignes). Utiliser la fonction
rownames. Quelle est la classe de cette colonne ? Modifier la classe de la colonne
en facteur. Afficher les données correspondant au chat.
4. Classer les espèces de la plus légère à la plus lourde en fonction du poids du corps.
5. Ajouter une ligne pour le fennec avec poids de cerveau de 10,2g et de corps de
1,7kg. Ajouter une colonne avec le poids de cerveau en kg.

6. Quelle est l’espèce avec le poids de cerveau le plus petit ? Quel est le poids de
cerveau moyen ? (utiliser les fonction min et mean)
38
Fonctions

• Exemples de fonctions : ensemble d’instructions qui effectuent une


tâche spécifique ; réduit la répétition dans le code en regroupant les
opérations fréquentes
sum(): somme d’un vecteur numérique
mean() : moyenne d’un vecteur numérique (attention aux valeurs
manquantes, utiliser l’argument na.rm = TRUE)
sqrt(): racine carré d’un vecteur numérique

paste(): concatène des vecteurs après transformation en caractères

length(): longueur d’un vecteur


table(): retourne un tableau de contingence avec les effectifs pour
chaque combinaison de facteur

39
Fonctions

• Exemples de fonctions : ensemble d’instructions qui effectuent une


tâche spécifique ; réduit la répétition dans le code en regroupant les
opérations fréquentes
paste(): concatène des vecteurs après transformation en caractères

40
Fonctions

• Exemples de fonctions : ensemble d’instructions qui effectuent une


tâche spécifique ; réduit la répétition dans le code en regroupant les
opérations fréquentes
length(): longueur d’un vecteur

table(): retourne un tableau de contingence avec les effectifs pour


chaque combinaison de facteur

41
Fonctions

• Création d’une fonction : function()


nom_fonction = function(arg1, arg2) {
code à exécuter
return(valeur_de_retour)
}
nom_fonction : nom réel de la fonction stockée dans l'environnement R sous la
forme d'un objet portant ce nom.
arguments arg1, arg2 : lorsqu'une fonction est utilisée, on donne une valeur à
l'argument (facultatif  une fonction peut ne contenir aucun argument). Les
arguments peuvent également avoir des valeurs par défaut.
code à exécuter : le corps de la fonction contient un ensemble de déclarations qui
définissent ce que fait la fonction.
valeur_de_retour : dernière expression du corps de la fonction à être évaluée et
retournée par la fonction.
42
Fonctions

• Exemple de création d’une fonction :


Calcul taux d’incidence d’une maladie  nombre de nouveaux cas divisé par
la population à risque et multiplié par 1000 (taux pour 1000 habitants)

43
Application 3
1. Créer une fonction qui permet de trouver le minimum et le maximum d’un
vecteur.

2. Créer une fonction qui permet de calculer le taux de mortalité (nombre de


décès pendant une période / nombre total d’animaux dans la population sur la
période), qui prend comme argument deces et population et qui renvoie le taux
de mortalité calculé pour 1000 animaux. Testez votre fonction avec quelques
valeurs pour deces et population pour vérifier qu’elle fonctionne correctement.

44
Eléments de programmation

• Les conditions if et else :


 si (condition) {on fait ceci}

 si (condition) {on fait ceci} sinon {on fait cela }

45
Eléments de programmation

• Les conditions if et else :

 si (condition) {on fait ceci}


sinon si (condition) {on fait cela}
sinon {on fait cela}

46
Eléments de programmation

• Boucles for : répète une action pour chaque élément d’un vecteur ou
d’une liste
 pour (variable in séquence) {on fait ceci}

Exemples de boucle for :

47
Eléments de programmation

• Boucle while : répète une action tant qu’une condition est vraie
 tant que (condition) {on fait ceci}

Exemple de boucle while :

48
Application 4
Le jeu de données cas_lyme comprend le nombre de cas de maladie de Lyme en
France par région en 2020. On souhaite ajouter une colonne qui classifie chaque
région comme ayant un risque faible (< 50 cas), moyen (de 51 à 100 cas) ou élevé
(plus de 100 cas).
region cas (pour 100 000 habitants)
1. Créer le tableau de données suivant : 1 50

2 19

3 24

4 260

5 110

6 149

7 49

8 24

9 99

10 364

11 32

12 66

13 52

49
Application 4

2. Créer une colonne risque initialisée avec des valeurs NA (pas de valeur).

3. Utiliser une boucle for pour parcourir chaque ligne de cas_lyme. Dans cette
boucle, utiliser une fonction if et else pour définir le risque par mois et région
en fonction du nombre de cas. Assurer vous de stocker le résultat dans la colonne
risque.

4. Une fois terminé, examiner quelques lignes de cas_lyme pour vous assurer que
le niveau de risque a été correctement défini.

5. Indiquer combien de régions sont classées comme risque faible, moyen et élevé
(utiliser la fonction table).

50
Synthèse

- package
- = ou <-
- c()
- vecteur[ ]
- dataframe[ , ]
- classe d’un objet
- function()
- if (condition) {on fait ceci} else {on fait cela }
- boucles for et while

51
Importer/exporter des données

• Spécifier le répertoire courant :


on voit le répertoire courant

on change le répertoire courant ( aux /)

52
Importer/exporter des données

• Importer des données :


 S’assurer que le fichier à importer se trouve bien dans le répertoire
courant
 Plusieurs fonctions pour importer des données :
read.table, read.csv, read.csv2

 Argument colClasses pour spécifier le type des colonnes

53
Importer/exporter des données

• Exporter des données :


 Plusieurs fonctions pour importer des données :
write.table, write.csv, write.csv2

54
Description rapide des données

• Exemples de fonctions utiles pour vérifier/décrire les données


summary(): résumé de chaque colonne
str() : type des colonnes

dim(): donne les dimensions du data.frame (nombres de lignes et de


colonnes)
nrow(): nombres de lignes
ncol(): nombres de colonnes

55
Description rapide des données

• Exemples de fonctions utiles pour vérifier/décrire les données


hist(): histogramme d’une variable quantitative
boxplot(): boite à moustache d’une variable quantitative
barplot(): diagramme en barre pour une variable qualitative
pie(): camembert pour une variable qualitative
plot() : fonction générique pour les graphiques

Présentation rapide des fonctions graphiques de base sans le détail des arguments
 approfondissement avec package ggplot2 jeudi pour mettre en forme les
graphiques

56
Application 5
1. Importer le jeu de données concernant les tiques à l’affût collectées en forêt de Sénart
entre 2005 et 2008 (2005_2008_tq_affut.csv). Prenez connaissance des informations dans ce
fichier de données en les décrivant rapidement. Modifier le type des colonnes si besoin.

2. Quel est le mois avec le maximum de tiques collectées dans la zone bois en 2007 ?

3. Est-ce que certaines colonnes comportent des données manquantes ? Si oui, lesquelles
et à quoi correspondent ces informations manquantes ? Essayer de croiser la ou les
colonne(s) avec des NA avec la colonne annee pour mieux comprendre.
4. Créer le tableau croisé entre la colonne habitat et stase pour obtenir le nombre de
collecte par habitat et stase des tiques.

5. Faire un histogramme du nombre total de nymphes collectées.

6. Faire un camembert du nombre de tiques collectées par stase. Vous pouvez utiliser la
fonction tapply ou les fonctions du package dplyr.

7. Exporter un fichier csv comprenant les données de nymphes à l’affût uniquement, avec
les colonnes mois, annee, habitat, total, temperature et hygrometrie.
 fichier ny_affut_senart.csv

57
Application 6
1. Importer le jeu de données concernant les résultats d’analyse en Borrelia burgdorferi sl
des tiques à l’affût (2007_2008_tq_affut_borr.csv). Prenez connaissance des informations
dans ce fichier en les décrivant rapidement. Modifier le type des colonnes si besoin.

2. La personne qui a fait la saisie de ces données indique qu’elle a fait une erreur de saisie
sur la date d’extraction de quelques tiques en 2008. Au lieu d’indiquer "2008-03-21", elle a
noté "2008-03-20". Corriger ces erreurs de saisie dans le fichier.

3. Pour homogénéiser les colonnes entre fichiers, transformer le codage de la colonne


habitat. SEBois devient bois et SEPlaine devient plaine.

4. Créer un fichier contenant à la fois les densités de nymphes à l’affût (Application 5) et le


nombre de nymphes totales (n) et positives (nb_pos) en Borrelia burgdorferi sl (Application
6) pour l’année 2007 et les habitats bois et plaine.
- renommer la colonne total en ny_affut (fonction colnames)
- vérifier que les classes de la variable mois sont bien homogènes dans le fichier
Borrelia et corriger si besoin
- ajouter un identifiant unique aux deux fichiers puis les fusionner (fonction
merge)
- garder les colonnes utiles du fichier

58
Application 6
5. Comparer la colonne ny_affut et n. Commenter et trouver une solution si besoin.

6. Calculer les prévalences des nymphes à l’affût par mois et habitat en 2007 à Sénart
(prev), avec seulement 1 chiffre après la virgule (fonction round).

7. Représenter graphiquement les densités de nymphes à l’affût puis leurs prévalences


entre mars et octobre 2007 pour l’habitat bois puis pour l’habitat plaine. Comparer et
commenter les graphiques obtenus.
- pour faire ces graphiques, il faut créer une colonne date de la forme jour-mois-
annee. On considérera que les collectes ont été réalisées le 15 de chaque mois.
Astuce : il est difficile de transformer une colonne des mois en français en date. Pour vous aider, vous
pouvez utiliser ce code qui permet de créer une colonne des mois en anglais à partir de la colonne des
mois en français. Après cela, il vous reste à créer la colonne date ; le plus simple étant d’utiliser la
fonction dmy du package lubridate.
mois_fr = c("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre",
"décembre")
mois_en = c("January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
"November", "December")
tq_2007$mois2 = mois_en[match(tq_2007$mois, mois_fr)]

8. Exporter le fichier obtenu sous le nom ny_2007_senart.csv (colonnes id, mois, annee,
habitat, ny_affut, temperature, hygrometrie, nb_pos, n, prev, mois2, date)
59
Application 7
1. Importer les données de Sénart correspondant aux captures de rongeurs en 2007
(2007_rongeurs.csv) et aux densités de rongeurs entre 2005 et 2010
(2005_2010_rongeurs_densite.csv). Prenez connaissance des informations dans ces fichiers de
données en les décrivant rapidement. Modifier le type des colonnes si besoin.

2. Nettoyage données :
- Conserver uniquement les données de densités de 2007 et supprimer la colonne se,
- Conserver uniquement les colonnes id, date, espece, sexe_F, sexe_M, poids, age_ad,
age_J, tique, ny_or, ny_cou, ny_corps, ny_oeil, ny_tot, ny_or, ny_cou, ny_corps,
ny_oeil, ny_tot, tq_tot, borrelia, esp_borr,
- Vérifier l’absence de données manquantes ou aberrantes dans ces colonnes. Corriger
si besoin.

3. Créer un identifiant unique comprenant l’espèce (colonne espece) et le numéro de l’animal


(colonne id). Exemple : pour le tamia numéro 12, l’identifiant est ts12.

4. Créer une colonne unique pour l’âge des rongeurs et une autre pour le sexe. Combiner les
variables age et sexe pour faire une variable age_sexe avec 4 catégories (jeune mâle, mâle
adulte, jeune femelle, femelle adulte). Il est possible qu’il y ait des NA, auquel cas il faudra ajouter
des catégories. Vous pouvez retirer les colonnes sexe_F, sexe_M et age_ad, age_J du
data.frame.

60
Application 7
5. Ajouter une colonne mois à partir de la colonne date. Utiliser la fonction substr ou
une fonction du package stringr. Vous pouvez faire une première étape en extrayant le mois
sous forme de chiffres de la colonne date puis utiliser la même astuce que dans l’application 6 pour
transformer en mois sous forme de caractères.

6. Ajouter les informations concernant les densités par espèce de rongeur et par mois en
2007 dans le fichier des captures.
- Pour faciliter la fusion des données, créer une colonne espece_mois,
- Supprimer les colonnes en double (garder une seule colonne),
- Renommer les colonnes si besoin.

7. Ajouter les informations concernant les nymphes à l’affût (ny_2007_senart.csv) dans le


fichier de captures. Ce fichier comprend 1 ligne par rongeur. Les densités de nymphes à
l’affût correspondront au milieu bois.
- Supprimer les colonnes en double (garder une seule colonne),
- Renommer les colonnes si besoin,
- Ordonner le fichier en fonction des colonnes espece et mois,
- Exporter ce fichier sous le nom rongeurs_2007_senart.csv.
8. Quelle est la localisation des larves et des nymphes la plus fréquente pour les trois
espèces de rongeurs ?

61
Application 7
9. Quelle est l’espèce de Borrelia majoritaire pour chaque espèce de rongeurs ?

10. Calculer et représenter graphiquement les charges moyennes en tiques et la


prévalence en Borrelia des trois espèces de rongeurs entre mars et octobre 2007. Pour les
calculs, n’hésitez pas à faire une boucle (voir une double boucle – une sur le mois et une sur les espèces)
pour créer le data.frame avec les informations dont vous avez besoin. Pour calculer la moyenne des
charges en tiques, utiliser la fonction mean. Attention de bien préciser l’argument na.rm = TRUE
pour que le calcul puisse se faire en présence de NA dans les données
- Comparer les graphiques entre espèces de rongeurs (pour la charge en tiques et
la prévalence en Borrelia ),
- Comparer le graphique des charges en tiques des tamias avec celui des densités
de nymphes à l’affût dans le bois entre mars et octobre 2007.

62
Synthèse

- getwd(), setwd()
- read.csv() et write.csv()
- summary()
- str()
- dim(), nrow(), ncol()
- plot(), hist(), boxplot(), barplot(), pie()
- tapply(), round()
- colnames(), substr()
- merge(), rbind(), cbind()
- as.Date() ou dmy() (package lubridate)

63

Vous aimerez peut-être aussi