[R] generating unordered combinations

Erik Iverson eiverson at NMDP.ORG
Thu Sep 17 23:31:20 CEST 2009


Dan, 

Still maybe a bit ugly, but no looping...

> unique(as.data.frame(t(apply(expand.grid(0:2, 0:2, 0:2), 1, sort))))
   V1 V2 V3
1   0  0  0
2   0  0  1
3   0  0  2
5   0  1  1
6   0  1  2
9   0  2  2
14  1  1  1
15  1  1  2
18  1  2  2
27  2  2  2

Best,
Erik 

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
> On Behalf Of Dan Halligan
> Sent: Thursday, September 17, 2009 3:31 PM
> To: r-help at r-project.org
> Subject: [R] generating unordered combinations
> 
> Hi,
> 
> I am trying to generate all unordered combinations of a set of
> numbers / characters, and I can only find a (very) clumsy way of doing
> this using expand.grid.  For example, all unordered combinations of
> the numbers 0, 1, 2 are:
> 0, 0, 0
> 0, 0, 1
> 0, 0, 2
> 0, 1, 1
> 0, 1, 2
> 0, 2, 2
> 1, 1, 1
> 1, 1, 2
> 1, 2, 2
> 2, 2, 2
> 
> (I have not included, for example, 1, 0, 0, since it is equivalent to
> 0, 0, 1).
> 
> I have found a way to generate this data.frame using expand.grid as
> follows:
> 
> g <- expand.grid(c(0,1,2), c(0,1,2), c(0,1,2))
> for(i in 1:nrow(g)) {
> 	g[i,] <- sort(as.character(g[i,]))
> }
> o <- order(g$Var1, g$Var2, g$Var3)
> unique(g[o,]).
> 
> This is obviously quite clumsy and hard to generalise to a greater
> number of characters, so I'm keen to find any other solutions.  Can
> anyone suggest a better (more general, quicker) method?
> 
> Cheers
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-
> guide.html
> and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list