Bonjour,
Est il possible de faire une anti jointure sur R?
Par exemple si j'ai 2 tables: tabA et tabB et que je souhaite faire une jointure par "id" si les observations sont dans tabA mais pas dans tabB
Avec SAS in tabA and not in tabB
Merci
Bonjour,
Est il possible de faire une anti jointure sur R?
Par exemple si j'ai 2 tables: tabA et tabB et que je souhaite faire une jointure par "id" si les observations sont dans tabA mais pas dans tabB
Avec SAS in tabA and not in tabB
Merci
Salut,
Renvoit ce qui est dans tabA et pas dans tabB
Code : Sélectionner tout - Visualiser dans une fenêtre à part setdiff(tabA$id,tabB$id)
Apres le reste de ce que tu veux faire n'est pas clair.
Mais la fonction setdiff() me donne seulement les élément identique des 2 tables...
Ce que je veux faire c'est une anti jointure de 2 tables.
Par exemple si j'ai:
Je veux faire la jointure en conservant uniquement les observations présentes dans tabA et pas dans la tabB, c'est-à-dire que le résultat ici serait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tabA = data.frame(id=c(1,2,3),nom=c("a1","a2","a3")) tabB = data.frame(id=c(1,2,4),prenom=c("b1","b2","b4"))
id nom prénom
3 a3 NA
Non, lance la fonction tu verras.Mais la fonction setdiff() me donne seulement les élément identique des 2 tables...
je veux faire la jointure en concervant uniquement les observations présentes dans tabA et pas dans la tabB, c'est à dire que le résultat ici serait
setdiff est bien approprié.
Renvoit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 m<-merge(tabA, tabB,all.x=TRUE) m[m$id %in% setdiff(tabA$id,tabB$id),]
Par contre j'avoue que j'ai du mal à voir l'interet de faire ca mais bon ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2id nom prenom 3 a3 <NA>
Sinon, pour faire des jointures ou anti-jointures sur des data.frames, on peut passer par le package data.table (rapide, simple et efficace) :
La seule différence avec ce que vous souhaitez, c'est que ça ne renvoie pas la colonne "prenom", ce qui n'est d'ailleurs pas utile vu qu'elle est toujours vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 library(data.table) tabA <- data.table(id=c(1,2,3),nom=c("a1","a2","a3"), key="id") tabB <- data.table(id=c(1,2,4),prenom=c("b1","b2","b4"), key = "id") tabA[!tabB]
Rédacteur / Modérateur SGBD et R
Mes tutoriels et la FAQ MySQL
----------------------------------------------------
Pensez aux balises code et au tag
Une réponse vous a plu ? N'hésitez pas à y mettre un
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager