Is this close to what you are looking for?
library(data.table) relationships<-data.table(object.1=c("A","A","B"),object.2=c("B","C","C"),relationship=1:3) relationships<-rbindlist(list(relationships,relationships[,list(object.1=object.2, object.2=object.1, relationship)])) setkey(relationships,object.1,object.2) perm<-CJ(C1=LETTERS[1:3],C2=LETTERS[1:3],C3=LETTERS[1:3])[!C1==C2 & !C1==C3 & !C2==C3] setkey(perm,C1,C2) perm[relationships,rel.1:=relationship] setkey(perm,C2,C3) perm[relationships,rel.2:=relationship] perm[order(-rel.1,-rel.2)]
It is not very extensible as it is, but perhaps it can be expanded ...
source share