[R] Recoding multiple TRUE/FALSE columns into a single list of TRUE columns

jim holtman jholtman at gmail.com
Mon Dec 26 02:38:32 CET 2011


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 <davideps at 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 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.



-- 
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.



More information about the R-help mailing list