[R] function for grouping

Petr Savicky savicky at cs.cas.cz
Tue Jan 24 19:05:37 CET 2012


On Tue, Jan 24, 2012 at 05:19:42PM +0000, yan jiao wrote:
> Dear All,
> 
> I'm wondering if there is a R function could give me all the 
> combinations of the grouping/cluster result, given the number of the groups.
> e.g.
> 3 objects: x1 x2 x3, number of groups is 2
> so the result will be
> group1:x1,x2; group2: x3
> group1: x1;group2: x2,x3
> group1: x1,x3;group2: x2

Hi.

Represent a grouping by a mapping, which assigns
a group number to each element. In your example,
we will have the groupings

  x1 x2 x3
  1  1  2
  1  2  2
  1  2  1

This may be generated as

  expand.grid(x1=1, x2=1:2, x3=1:2)

where we have to eliminate the first row
with all ones.

  expand.grid(x1=1, x2=1:2, x3=1:2)[ -1, ]

    x1 x2 x3
  2  1  2  1
  3  1  1  2
  4  1  2  2

For 4 elements, we get

  gr <- expand.grid(x1=1, x2=1:2, x3=1:2, x4=1:2)[ -1, ]
  row.names(gr) <- 1:nrow(gr)
  gr

    x1 x2 x3 x4
  1  1  2  1  1
  2  1  1  2  1
  3  1  2  2  1
  4  1  1  1  2
  5  1  2  1  2
  6  1  1  2  2
  7  1  2  2  2

For example, group 1 in grouping 3 may be obtained

  names(gr)[gr[3, ] == 1]

  [1] "x1" "x4"

and group 2 is

  names(gr)[gr[3, ] == 2]

  [1] "x2" "x3"

For more groups, a similar approach may be used.
Eliminating equivalent groupings may be done,
for example, by requiring that if an element is
assigned to group i, then each of the groups
1, ..., i-1 is assigned to some earlier element.

So, 1, 2, 3, 2 is OK, but 1, 3, 2, 2 is not.

Petr Savicky.



More information about the R-help mailing list