Développer une liste pour inclure toutes les combinaisons possibles par paires dans un groupe


user1911111

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.

Akrun

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 combnpar 'Groupe'

setDT(dt)[, {temp <- combn(Ind, 2); .(Ind1 = temp[1,], Ind2 = temp[2,])}, Group]

Articles connexes