# [R] Create a vector of combinations based on a table column names

Andy Bunn abunn at whrc.org
Tue Nov 23 17:39:31 CET 2004

```There has to be a better (more readable) way, but this works...

> set.seed(323)
> foo.df <- data.frame(A = round(runif(5)), B = round(runif(5)), C =
round(runif(5)))
> foo.df
A B C
1 0 1 1
2 1 1 1
3 1 1 1
4 0 1 1
5 1 1 0
> names.list <- lapply( apply( foo.df, 1, function( x ) colnames(
foo.df )[ as.logical( x ) ] ), paste, collapse = ", " )
> names.vect <- unlist(names.list)
> foo.df
A B C
1 0 1 1
2 1 1 1
3 1 1 1
4 0 1 1
5 1 1 0
> names.vect
1         2         3         4         5
"B, C" "A, B, C" "A, B, C"    "B, C"    "A, B"
>

Those nested applies make my head hurt.

HTH, Andy

> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch
> [mailto:r-help-bounces at stat.math.ethz.ch]On Behalf Of Henrik Andersson
> Sent: Tuesday, November 23, 2004 10:41 AM
> To: r-help at stat.math.ethz.ch
> Subject: [R] Create a vector of combinations based on a table column
> names
>
>
> I want to create a character vector based on the table (shortened for
> display) below:
> Where there are ones in the matrix I want the column name to appear and
> where there are zeros nothing, which would make the vector in this
> shortened case:
>
> combinations <- ("A B","A C","A E H","A F G","B C D","E G H",A C D E
> H","A C D F G")
>
>      no  value  A  B  C  D  E  F  G   H
> 1    2  3.095  1  1  0  0  0  0  0   0
> 2    2  1.687  1  0  1  0  0  0  0   0
> 46   3  3.470  1  0  0  0  1  0  0   1
> 47   3  1.563  1  0  0  0  0  1  1   0
> 50   3  6.234  0  1  1  1  0  0  0   0
> 148  4  3.663  0  0  1  0  1  0  1   1
> 151  4  3.470  0  0  0  1  1  1  0   1
> 177  5  5.411  1  0  1  1  1  0  0   1
> 178  5  6.829  1  0  1  1  0  1  1   0
>
> Question is how to make this not so manually?
>
> ---------------------------------------------
> Netherlands Institute of Ecology -
> Centre for Estuarine and Marine Ecology
> P.O. Box 140
> 4400 AC Yerseke
> Phone: +31 113 577473