try this:
> test.. <- data.frame(Apples = c(1,3,0,0,1), Pears = c(0,0,1,0,2), Beans
+ c(1,2,1,0,0))
>
> lapply(seq(nrow(test..)), function(.row){
+ do.call(c, sapply(names(test..), function(.col){
+ rep(.col, test..[[.col]][.row])
+ }))
+ })
[[1]]
Apples Beans
"Apples" "Beans"
[[2]]
Apples1 Apples2 Apples3 Beans1 Beans2
"Apples" "Apples" "Apples" "Beans"
"Beans"
[[3]]
Pears Beans
"Pears" "Beans"
[[4]]
character(0)
[[5]]
Apples Pears1 Pears2
"Apples" "Pears" "Pears"
On Wed, May 30, 2012 at 8:50 PM, LCOG1 <jroll at lcog.org>
wrote:> Hi all,
> ?I Have a data frame test.. that I would like to convert into a list below
> test_ but am unsure how to efficiently do this. ?I can do it in a for loop
> but my data set is huge and it takes forever. ?Wondering how I can do this
> more efficiently. ?So again how to I go from test.. to test_ below?
> #Data frame
> test.. <- data.frame(Apples = c(1,3,0,0,1), Pears = c(0,0,1,0,2), Beans
> c(1,2,1,0,0))
>
> #list - my desired outcome
> test_ <- list("1" = c("Apples","Beans"),
> ? ? ? ? ? ? ? ? ? ? ? ? ?"2" =
c("Apples","Apples","Apples","Beans","Beans"),
> ? ? ? ? ? ? ? ? ? ? ? ? ?"3" =
c("Pears","Beans"),
> ? ? ? ? ? ? ? ? ? ? ? ? ?"4" = c(NULL),
> ? ? ? ? ? ? ? ? ? ? ? ? ?"5" =
c("Apples","Pears","Pears"))
>
> Thanks
>
> Josh
>
> --
> View this message in context:
http://r.789695.n4.nabble.com/Probably-a-good-use-for-apply-tp4631883.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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.