# combination workout in r

Here is my dataframe:

name <- c("P1", "P2", "IndA", "IndB", "IndC", "IndD", "IndE", "IndF", "IndG") A <- c(1, 3, 1, 2, 2, 5, 5, 1, 4) B <- c(2, 4, 3, 4, 2, 2, 6, 2, 2) mydf <- data.frame (name, A, B)

The following explanation illustrates what combination I want to generate and identify that is not possible combination.

Each parents (P1 and P2) has two and can contribute one to their child (Individual).

The parents can have same (for example 1, in the following example) and can contribute one each time.

Thus this becomes a combination game, the following example of combination.

Reciprocals are same (correct): 1 3 is same as 3 1

**Question is: creat possible combination and find those that can not be member of combination.**

name <- c("P1", "P2", "IndA", "IndB", "IndC", "IndD", "IndE", "IndF", "IndG") A <- c(1, 3, 1, 2, 2, 5, 5, 1, 4) B <- c(2, 4, 3, 4, 2, 2, 6, 2, 2) mydf <- data.frame (name, A, B) name A B 1 P1 1 2 2 P2 3 4 3 IndA 1 3 4 IndB 2 4 5 IndC 2 2 6 IndD 5 2 7 IndE 5 6 8 IndF 1 2 9 IndG 4 2

**Expected output:**

name A B correct 1 P1 1 2 NA 2 P2 3 4 NA 3 IndA 1 3 TRUE 4 IndB 2 4 TRUE 5 IndC 2 2 FALSE 6 IndD 5 2 FALSE 7 IndE 5 6 FALSE 8 IndF 1 2 FALSE 9 IndG 4 2 TRUE

**Edits:** Second dataset for double check:

name <- c("P1", "P2", "IndH", "IndI", "IndJ", "IndK") A <- c(1, 3, 3, 1, 4, 3) B <- c(1, 4, 3, 1, 1, 5) mydf2 <- data.frame (name, A, B) mydf2 name A B Correct 1 P1 1 1 NA 2 P2 3 4 NA 3 IndH 3 3 FALSE 4 IndI 1 1 FALSE 5 IndJ 4 1 TRUE 6 IndK 3 5 FALSE

## Answers

something like

dum.match<-rbind(expand.grid(c(mydf[1,2:3]),c(mydf[2,2:3])),expand.grid(c(mydf[2,2:3]),c(mydf[1,2:3]))) newmydf<-cbind(mydf,paste(mydf$A,mydf$B)%in%paste(dum.match$Var1,dum.match$Var2)) > newmydf name A B paste(mydf$A, mydf$B) %in% paste(dum.match$Var1, dum.match$Var2) 1 P1 1 2 FALSE 2 P2 3 4 FALSE 3 IndA 1 3 TRUE 4 IndB 2 4 TRUE 5 IndC 2 2 FALSE 6 IndD 5 2 FALSE 7 IndE 5 6 FALSE 8 IndF 1 2 FALSE 9 IndG 4 2 TRUE dum.match2<-rbind(expand.grid(c(mydf2[1,2:3]),c(mydf2[2,2:3])),expand.grid(c(mydf2[2,2:3]),c(mydf2[1,2:3]))) newmydf2<-cbind(mydf2,paste(mydf2$A,mydf2$B)%in%paste(dum.match2$Var1,dum.match2$Var2)) > newmydf2 name A B paste(mydf2$A, mydf2$B) %in% paste(dum.match2$Var1, dum.match2$Var2) 1 P1 1 1 FALSE 2 P2 3 4 FALSE 3 IndH 3 3 FALSE 4 IndI 1 1 FALSE 5 IndJ 4 1 TRUE 6 IndK 3 5 FALSE >