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