Développer une liste pour inclure toutes les combinaisons possibles par paires dans un groupe
J'exécute actuellement une randomisation où les individus d'une population donnée sont échantillonnés et placés dans des groupes de taille définie. Le résultat est une trame de données vue ci-dessous:
Ind Group
Sally 1
Bob 1
Sue 1
Joe 2
Jeff 2
Jess 2
Mary 2
Jim 3
James 3
Existe-t-il une fonction qui me permettra d'étendre l'ensemble de données pour afficher tous les possibles au sein de l'appariement de groupe? (Sortie souhaitée ci-dessous). Les appariements n'ont pas besoin d'être réciproques.
Group Ind1 Ind2
1 Sally Bob
1 Sally Sue
1 Sue Bob
2 Joe Jeff
2 Joe Jess
2 Joe Mary
2 Jeff Jess
2 Jess Mary
2 Jeff Mary
3 Jim James
J'ai l'impression qu'il doit y avoir un moyen de faire cela dans dplyr, mais pour la vie de moi, je n'arrive pas à résoudre le problème.
Voici une option utilisant data.table
. Convertir en data.table
( setDT(dt)
), faire une jointure croisée ( CJ
) groupée par 'Group' et supprimer les duplicated
éléments
library(data.table)
setDT(dt)[, CJ(Ind1 = Ind, Ind2 = Ind, unique = TRUE)[Ind1 != Ind2],
Group][!duplicated(data.table(pmax(Ind1, Ind2), pmin(Ind1, Ind2)))]
# Group Ind1 Ind2
#1: 1 Bob Sally
#2: 1 Bob Sue
#3: 1 Sally Sue
#4: 2 Jeff Jess
#5: 2 Jeff Joe
#6: 2 Jeff Mary
#7: 2 Jess Joe
#8: 2 Jess Mary
#9: 2 Joe Mary
#10: 3 James Jim
Ou en utilisant combn
par 'Groupe'
setDT(dt)[, {temp <- combn(Ind, 2); .(Ind1 = temp[1,], Ind2 = temp[2,])}, Group]