PRISE EN MAIN DU LOGICIEL R
ET MANIPULATION D'OBJETS
Master Epidémiologie et Surveillance des Maladies Infectieuses Humaines et Animales
Maud Marsot ([Link]@[Link])
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
[Link]
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)
[Link]("mean" ) Forum :
[Link]
Sites internet :
[Link]
[Link]
[Link] (E. Paradis)
[Link]
[Link]
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
[Link] 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()
[Link](), [Link](), …
Fonction pour modifier la classe d’un objet
[Link](), [Link](), …
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 ([Link])
• 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 [Link])
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 [Link])
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 [Link])
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 [Link])
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 [Link])
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 [Link])
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 (= [Link])
Toutes les colonnes ont la même classe (≠ [Link])
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 [Link] = 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 :
[Link], [Link], 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 :
[Link], [Link], 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 [Link] (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
[Link].
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 [Link] 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 [Link] = 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()
- [Link]() et [Link]()
- summary()
- str()
- dim(), nrow(), ncol()
- plot(), hist(), boxplot(), barplot(), pie()
- tapply(), round()
- colnames(), substr()
- merge(), rbind(), cbind()
- [Link]() ou dmy() (package lubridate)
63