Try this:

> x <- read.table(text = "   P1   P2   P3   P4
+ 1   0    0    1    1
+ 2   0    1    1    1
+ 3   1    0    0    0
+ 4   0    0    0    0
+ 5   1    1    1    1  ", header = TRUE)
> labs <- apply(x, 1, function(.row){
+     indx <- which(.row == 1)
+     if (length(indx) > 0) return(paste(names(x)[indx], collapse = ','))
+     else return(NA)
+ })
> x$result <- labs
> x
  P1 P2 P3 P4      result
1  0  0  1  1       P3,P4
2  0  1  1  1    P2,P3,P4
3  1  0  0  0          P1
4  0  0  0  0        <NA>
5  1  1  1  1 P1,P2,P3,P4
>


On Sun, Dec 25, 2011 at 7:30 PM, David Epstein <david...@umich.edu> wrote:
> Hi everyone,
>
> I need to recode multiple columns in a dataframe into a single column in a
> variety of different ways.  Often the values will be TRUE/FALSE and I want a
> list of the columns that are true as in the Result column below:
>
>    P1   P2   P3   P4   Result
> 1   0    0    1    1    P3,P4
> 2   0    1    1    1    P2,P3,P4
> 3   1    0    0    0    P1
> 4   0    0    0    0    NA
> 5   1    1    1    1    P1,P2,P3,P4
>
> I'm still relatively new to R and tend to think in for loops. I'm sure there
> exists a more concise and elegant solution. Any advice?
>
> Happy holidays,
> -david
>
> ______________________________________________
> R-help@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.



-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.

______________________________________________
R-help@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.

Reply via email to