Si vous deviez ne retenir qu'une seule structure de données pour toute votre carrière d'analyste en R, ce serait le dataframe (tableau de données).
Équivalent direct d'une table dans une base de données relationnelle (SQL), d'une feuille de calcul Excel ou d'un DataFrame Pandas en Python, le dataframe est un tableau à deux dimensions organisé en lignes (les observations ou individus) et en colonnes (les variables mesurées).
Sa force réside dans son hybridation : chaque colonne est un vecteur homogène d'un type précis (numérique, texte, date, facteur), mais différentes colonnes peuvent avoir des types différents.
1. Création d'un Dataframe avec data.frame()#
On construit un dataframe en fournissant des vecteurs de longueur identique :
clients <- data.frame(
id = 1:5,
nom = c("Dupont", "Martin", "Bernard", "Thomas", "Petit"),
age = c(28, 45, 34, 52, 23),
ville = factor(c("Paris", "Lyon", "Paris", "Marseille", "Lyon")),
depenses = c(120.50, 450.00, 89.90, 310.20, 15.00),
fidele = c(TRUE, TRUE, FALSE, TRUE, FALSE)
)
print(clients)
Sortie :
id nom age ville depenses fidele
1 1 Dupont 28 Paris 120.50 TRUE
2 2 Martin 45 Lyon 450.00 TRUE
3 3 Bernard 34 Paris 89.90 FALSE
4 4 Thomas 52 Marseille 310.20 TRUE
5 5 Petit 23 Lyon 15.00 FALSE
2. Fonctions indispensables pour inspecter un jeu de données#
Avant de vous lancer dans des analyses complexes, inspectez systématiquement votre table :
# Afficher les 6 premières lignes
head(clients, n = 3)
# Dimensions globales
dim(clients) # [1] 5 6 (5 lignes, 6 colonnes)
nrow(clients) # [1] 5
ncol(clients) # [1] 6
# Noms des variables
colnames(clients)
# Structure interne et types des colonnes
str(clients)
# Résumé statistique automatique
summary(clients)
3. Sélection et création de colonnes#
1. Extraire une colonne existante#
Le moyen le plus direct et lisible est l'utilisation de l'opérateur dollar $ :
# Extrait un vecteur numérique
clients$depenses
# Calculer immédiatement la moyenne des dépenses
mean(clients$depenses) # [1] 197.12
2. Ajouter une nouvelle colonne calculée#
L'ajout se fait par simple affectation :
# Calculer le montant TTC (TVA à 20%)
clients$depenses_ttc <- clients$depenses * 1.20
# Créer une variable booléenne indiquant un client senior (> 40 ans)
clients$senior <- clients$age > 40
4. Filtrer les lignes et sous-ensembles (Slicing)#
Pour sélectionner des lignes répondant à des critères précis, on utilise l'indexation matricielle clients[condition, ] :
# 1. Sélectionner les clients parisiens
clients_paris <- clients[clients$ville == "Paris", ]
# 2. Sélectionner les clients ayant dépensé plus de 100€ ET fidèles
gros_clients <- clients[clients$depenses > 100 & clients$fidele == TRUE, ]
# 3. Sélectionner des colonnes spécifiques pour un sous-ensemble de lignes
clients[clients$age < 30, c("nom", "depenses")]
[!TIP] La fonction alternative
subset():
R propose également la fonctionsubset(), très pratique car elle évite de répéter le nom du dataframe :
Mise en pratique#
- À partir du dataframe
clientscréé ci-dessus, calculez l'âge moyen des clients de votre base. - Filtrez le dataframe pour ne conserver que les clients fidèles ayant moins de 50 ans.
- Ajoutez une colonne
statut_panierqui vaut"Grand"si les dépenses dépassent 200€, et"Petit"sinon, en utilisant la fonction vectoriséeifelse(clients$depenses > 200, "Grand", "Petit").
Commentaires