JOINTURE AVEC R
Création de deux tableaux
table1 <- data.frame(id = 1:3, nom = c("Alice", "Bob", "Charlie"))
table1
id nom
1 1 Alice
2 2 Bob
3 3 Charlie
table2 <- data.frame(id = c(1, 2, 4), age = c(25, 30, 35))
table2
id age
1 1 25
2 2 30
3 4 35
Jointure gauche (left_join)
La jointure gauche conserve toutes les lignes du tableau de gauche et
ajoute les colonnes du tableau de droite qui correspondent.
library(dplyr)
resultat <- left_join(table1, table2, by = "id")
resultat
id nom age
1 1 Alice 25
2 2 Bob 30
3 3 Charlie NA
Jointure droite (right_join)
La jointure droite conserve toutes les lignes du tableau de droite et
ajoute les colonnes du tableau de gauche qui correspondent.
resultat <- right_join(table1, table2, by = "id")
resultat
id nom age
1 1 Alice 25
2 2 Bob 30
3 4 <NA> 35
Jointure interne (inner_join)
La jointure interne ne conserve que les lignes qui ont des
correspondances dans les deux tableaux.
resultat <- inner_join(table1, table2, by = "id")
resultat
id nom age
1 1 Alice 25
2 2 Bob 30
Jointure complète (full_join)
La jointure complète conserve toutes les lignes des deux tableaux et
ajoute les colonnes correspondantes.
resultat <- full_join(table1, table2, by = "id")
resultat
id nom age
1 1 Alice 25
2 2 Bob 30
Page 1 sur 7
3 3 Charlie NA
4 4 <NA> 35
Pour effectuer une jointure sans utiliser le package dplyr on peut
utiliser la fonction merge(). Voici quelques exemples de jointures
courantes :
Jointure interne (Inner Join)
La jointure interne ne conserve que les lignes qui ont des
correspondances dans les deux tableaux.
resultat <- merge(table1, table2, by = "id")
resultat
id nom age
1 1 Alice 25
2 2 Bob 30
Jointure gauche (Left Join)
La jointure gauche conserve toutes les lignes du tableau de gauche et
ajoute les colonnes du tableau de droite qui correspondent.
resultat <- merge(table1, table2, by = "id", all.x = TRUE)
resultat
id nom age
1 1 Alice 25
2 2 Bob 30
3 3 Charlie NA
Jointure droite (Right Join)
La jointure droite conserve toutes les lignes du tableau de droite et
ajoute les colonnes du tableau de gauche qui correspondent.
resultat <- merge(table1, table2, by = "id", all.y = TRUE)
resultat
id nom age
1 1 Alice 25
2 2 Bob 30
3 4 <NA> 35
Jointure complète (Full Join)
La jointure complète conserve toutes les lignes des deux tableaux et
ajoute les colonnes correspondantes.
resultat <- merge(table1, table2, by = "id", all = TRUE)
resultat
id nom age
1 1 Alice 25
2 2 Bob 30
3 3 Charlie NA
4 4 <NA> 35
Page 2 sur 7
Pour gérer les doublons lors d'une jointure en R, il est possible
d’utiliser plusieurs approches. Voici quelques méthodes courantes :
Utiliser distinct() de dplyr
La fonction distinct() permet de supprimer les doublons avant ou après
la jointure.
library(dplyr)
# Création des tableaux
tab1 <- data.frame(id = c(1, 2, 2, 3), nom = c("Alice", "Bob", "Bob",
"Charlie"))
tab1
id nom
1 1 Alice
2 2 Bob
3 2 Bob
4 3 Charlie
tab2 <- data.frame(id = c(1, 2, 4), age = c(25, 30, 35))
tab2
id age
1 1 25
2 2 30
3 4 35
# Supprimer les doublons avant la jointure
tab1_unique <- distinct(tab1)
tab1_unique
id nom
1 1 Alice
2 2 Bob
3 3 Charlie
resultat <- left_join(tab1_unique, tab2, by = "id")
resultat
id nom age
1 1 Alice 25
2 2 Bob 30
3 3 Charlie NA
Utiliser duplicated() de base R
La fonction duplicated() permet d'identifier et de supprimer les
doublons.
# Supprimer les doublons avant la jointure
tab1_unique <- tab1[!duplicated(tab1), ]
resultat <- merge(tab1_unique, tab2, by = "id", all.x = TRUE)
resultat
id nom age
1 1 Alice 25
2 2 Bob 30
3 3 Charlie NA
Page 3 sur 7
Gérer les doublons après la jointure
Après avoir effectué la jointure, on peut
utiliser distinct() ou duplicated() pour supprimer les doublons dans le
résultat final.
# Jointure avec doublons
resultat <- merge(tab1, tab2, by = "id", all.x = TRUE)
resultat
id nom age
1 1 Alice 25
2 2 Bob 30
3 2 Bob 30
4 3 Charlie NA
# Supprimer les doublons après la jointure
resultat_unique <- resultat[!duplicated(resultat), ]
resultat_unique
id nom age
1 1 Alice 25
2 2 Bob 30
4 3 Charlie NA
Page 4 sur 7
Pour effectuer une jointure conditionnelle en R, on peut utiliser une
combinaison de dplyr et de fonctions de base R pour ajouter des
conditions spécifiques. Voici un exemple :
Exemple de jointure conditionnelle avec dplyr
Supposons qu’on souhaite joindre deux tables en fonction d'une condition
spécifique sur une colonne.
library(dplyr)
# Création des tables
tab1 <- data.frame(id = 1:4, nom = c("Alice", "Bob", "Charlie", "David"),
score = c(85, 90, 78, 88))
tab1
id nom score
2 2 Bob 90
3 3 Charlie 78
4 4 David 88
tab2 <- data.frame(id = c(1, 2, 3, 4), age = c(25, 30, 35, 40))
tab2
id age
1 1 25
2 2 30
3 3 35
4 4 40
# Jointure conditionnelle : joindre seulement si le score est supérieur
à 80
resultat <- tab1 %>% filter(score > 80) %>% left_join(tab2, by = "id")
resultat
id nom score age
1 1 Alice 85 25
2 2 Bob 90 30
3 4 David 88 40
Exemple de jointure conditionnelle avec base R
On peut également utiliser des fonctions de base R pour effectuer une
jointure conditionnelle.
# Filtrer les lignes avant la jointure
tab1_filtre <- tab1[tab1$score > 80, ]
tab1_filtre
id nom score
1 1 Alice 85
2 2 Bob 90
4 4 David 88
# Jointure avec merge()
resultat <- merge(tab1_filtre, tab2, by = "id", all.x = TRUE)
resultat
id nom score age
1 1 Alice 85 25
2 2 Bob 90 30
3 4 David 88 40
Page 5 sur 7
Pour effectuer une jointure avec plusieurs conditions en R, tu peux
utiliser le package dplyr et spécifier plusieurs colonnes dans
l'argument by. Voici un exemple :
Exemple avec dplyr
Supposons que nous ayons deux tables et qu’on souhaite les joindre en
utilisant plusieurs colonnes comme conditions.
library(dplyr)
# Création des tableaux
tab1 <- data.frame(id = 1:4, nom = c("Alice", "Bob", "Charlie", "David"),
score = c(85, 90, 78, 88))
tab1
id nom score
1 1 Alice 85
2 2 Bob 90
3 3 Charlie 78
4 4 David 88
tab2 <- data.frame(id = c(1, 2, 3, 4), age = c(25, 30, 35, 40), score =
c(85, 90, 80, 88))
tab2
id age score
1 1 25 85
2 2 30 90
3 3 35 80
4 4 40 88
# Jointure avec plusieurs conditions
resultat <- tab1 %>% inner_join(tab2, by = c("id", "score"))
resultat
id nom score age
1 1 Alice 85 25
2 2 Bob 90 30
3 4 David 88 40
Exemple avec base R
Tu peux également utiliser la fonction merge() de base R pour effectuer
une jointure avec plusieurs conditions.
# Jointure avec plusieurs conditions
resultat <- merge(tab1, tab2, by = c("id", "score"))
resultat
id score nom age
1 1 85 Alice 25
2 2 90 Bob 30
3 4 88 David 40
Page 6 sur 7
Pour gérer les conflits lors d'une jointure en R, on peut utiliser
plusieurs approches pour résoudre les problèmes de colonnes ayant le
même nom ou des valeurs conflictuelles. Voici quelques méthodes courantes
:
Renommer les colonnes avant la jointure
Avant de faire la jointure, on peut renommer les colonnes pour éviter
les conflits de noms.
# Création des tables
tab1 <- data.frame(id = 1:3, nom = c("Alice", "Bob", "Charlie"), valeur
= c(10, 20, 30))
tab1
id nom valeur
1 1 Alice 10
2 2 Bob 20
3 3 Charlie 30
tab2 <- data.frame(id = c(1, 2, 4), valeur = c(100, 200, 300))
tab2
id valeur
1 1 100
2 2 200
3 4 300
# Renommer la colonne valeur de tab2
colnames(tab2)[2]<- "valeur_tab2"
tab2
id valeur_tab2
1 1 100
2 2 200
3 4 300
# Jointure
resultat <- merge(tab1, tab2, by = "id", all = TRUE)
resultat
id nom valeur valeur_tab2
1 1 Alice 10 100
2 2 Bob 20 200
3 3 Charlie 30 NA
4 4 <NA> NA 300
Utiliser les suffixes avec merge()
La fonction merge() permet d'ajouter des suffixes aux colonnes pour
éviter les conflits.
# Jointure avec suffixes
resultat <- merge(tab1, tab2, by = "id", suffixes = c("_tab1", "_tab2"))
resultat
id nom valeur_tab1 valeur_tab2
1 1 Alice 10 100
2 2 Bob 20 200
Page 7 sur 7