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
Recoding multiple TRUE/FALSE columns into a single list of TRUE columns
3 messages · jim holtman, David Epstein
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.
Jim, Wow, that does it! I think I can use strsplit and unlist to convert the string of row names into a R list. thank you! -david