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.