On 05/03/2018 03:59 AM, Martin Maechler wrote:
David L Carlson <dcarl...@tamu.edu>
     on Wed, 2 May 2018 21:43:52 +0000 writes:

Typo: dat[[z]] should be x[[z]]:

x2 <- do.call(rbind, lapply(names(x), function(z)
                             data.frame(type=z, x[[z]])))
x2
   type x y
1    A 1 3
2    A 2 4
3    B 5 7
4    B 6 8

David C

Before this thread gets carried away to data.table and
tibbleverse (and as nobody else has done so) :

Let me nominate this beautiful solution by
Bill Dunlap and David Carlson to win the prize  with a 10 out 10 grade:

Beautiful use of  do.call() and lapply(), two of the most
versatile and important functions from the base R toolbox.

Congratulations!

Martin Maechler
R Core Team

First of all, thank you to all who responded. I have learned (and will learn) about several new things. The data.table/tibbleverse is one of those places I have yet to tread but it never seems to be a "good" time to learn as generally when these tools would be helpful is when I am trying to get something done but don't have the time to recast the problem in a different paradigm.

Second, I echo Martin's comment. The combined solution of Bill Dunlap and David Carlson is beautifully elegant.

Thanks again,

Kevin


-----Original Message-----
From: R-help <r-help-boun...@r-project.org> On Behalf Of David L Carlson
Sent: Wednesday, May 2, 2018 3:51 PM
To: William Dunlap <wdun...@tibco.com>; Kevin E. Thorpe 
<kevin.tho...@utoronto.ca>
Cc: r-help mailing list <r-help@r-project.org>
Subject: Re: [R] Converting a list to a data frame

Or add the type column first and then rbind:

x <- list(A=data.frame(x=1:2, y=3:4),B=data.frame(x=5:6,y=7:8))
x2 <- do.call(rbind, lapply(names(x), function(z)
       data.frame(type=z, dat[[z]])))

----------------------------------------
David L Carlson
Department of Anthropology
Texas A&M University
College Station, TX 77843-4352

-----Original Message-----
From: R-help <r-help-boun...@r-project.org> On Behalf Of William Dunlap via 
R-help
Sent: Wednesday, May 2, 2018 12:28 PM
To: Kevin E. Thorpe <kevin.tho...@utoronto.ca>
Cc: R Help Mailing List <r-help@r-project.org>
Subject: Re: [R] Converting a list to a data frame

x1 <- do.call(rbind, c(x, list(make.row.names=FALSE)))
x2 <- cbind(type=rep(names(x), vapply(x, nrow, 0)), x1)
str(x2)
'data.frame':   4 obs. of  3 variables:
  $ type: Factor w/ 2 levels "A","B": 1 1 2 2
  $ x   : int  1 2 5 6
  $ y   : int  3 4 7 8


Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Wed, May 2, 2018 at 10:11 AM, Kevin E. Thorpe <kevin.tho...@utoronto.ca>
wrote:

I suspect this is pretty easy, but I'm having trouble figuring it out.
Basically, I have a list of data frames such as the following example:

list(A=data.frame(x=1:2, y=3:4),B=data.frame(x=5:6,y=7:8))

I would like to turn this into  data frame where the list elements are
essentially rbind'ed together and the element name becomes a new variable.
For example, I would like to turn the list above into a data frame
that looks like this:

data.frame(type=c("A","A","B","B"),x=c(1:2,5:6),y=c(3:4,7:8))

Appreciate any pointers.

Kevin



--
Kevin E. Thorpe
Head of Biostatistics,  Applied Health Research Centre (AHRC)
Li Ka Shing Knowledge Institute of St. Michael's Hospital
Assistant Professor, Dalla Lana School of Public Health
University of Toronto
email: kevin.tho...@utoronto.ca  Tel: 416.864.5776  Fax: 416.864.3016

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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