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
Version imprimable
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 tabBCode: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 seraitCode:
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"))
Citation:
id nom prénom
3 a3 NA
Non, lance la fonction tu verras.Citation:
Mais la fonction setdiff() me donne seulement les élément identique des 2 tables...
Citation:
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:
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:
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:
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]