Hello, Given a list with all elements having identical layout, e.g.: l = NULL l[[1]] = list(4, "hello") l[[2]] = list(7, "world") l[[3]] = list(9, " !!!! ") is there an easy way to collapse this list into a data.frame with each row being the elements of the list ? I.e. in this case I want to convert the list into a data.frame with 3 rows and 2 columns, where column 1 holds the integer values, and column 2 the character values. I can get it done by looping over all elements and rbind them together to the final result, but that is quite slow (for large sets) and ugly, so I was wondering if there's an easy syntax. thanks a lot in advance, Thomas
Perhaps data.frame(do.call(rbind, l)) ? - Erik Iverson a9804814 at unet.univie.ac.at wrote:> Hello, > > > Given a list with all elements having identical layout, e.g.: > > > l = NULL > l[[1]] = list(4, "hello") > l[[2]] = list(7, "world") > l[[3]] = list(9, " !!!! ") > > > is there an easy way to collapse this list into a data.frame with each > row being the elements of the list ? > I.e. in this case I want to convert the list into a data.frame with 3 > rows and 2 columns, where column 1 holds the integer values, and column > 2 the character values. > > I can get it done by looping over all elements and rbind them together > to the final result, but that is quite slow (for large sets) and ugly, > so I was wondering if there's an easy syntax. > > thanks a lot in advance, > Thomas > > ______________________________________________ > 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.
try this:
l <- vector("list", 3)
l[[1]] <- list(4, "hello")
l[[2]] <- list(7, "world")
l[[3]] <- list(9, " !!!! ")
lis <- lapply(l, "names<-", value = c("V1",
"V2"))
do.call("rbind", lapply(lis, data.frame, stringsAsFactors = FALSE))
I hope it helps.
Best,
Dimitris
----
Dimitris Rizopoulos
Biostatistical Centre
School of Public Health
Catholic University of Leuven
Address: Kapucijnenvoer 35, Leuven, Belgium
Tel: +32/(0)16/336899
Fax: +32/(0)16/337015
Web: http://med.kuleuven.be/biostat/
http://www.student.kuleuven.be/~m0390867/dimitris.htm
Quoting a9804814 at unet.univie.ac.at:
> Hello,
>
>
> Given a list with all elements having identical layout, e.g.:
>
>
> l = NULL
> l[[1]] = list(4, "hello")
> l[[2]] = list(7, "world")
> l[[3]] = list(9, " !!!! ")
>
>
> is there an easy way to collapse this list into a data.frame with each
> row being the elements of the list ?
> I.e. in this case I want to convert the list into a data.frame with 3
> rows and 2 columns, where column 1 holds the integer values, and column
> 2 the character values.
>
> I can get it done by looping over all elements and rbind them together
> to the final result, but that is quite slow (for large sets) and ugly,
> so I was wondering if there's an easy syntax.
>
> thanks a lot in advance,
> Thomas
>
> ______________________________________________
> 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.
>
>
Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm