[R] Converting a list to a data frame
Kevin E. Thorpe
kev|n@thorpe @end|ng |rom utoronto@c@
Thu May 3 12:47:45 CEST 2018
On 05/03/2018 03:59 AM, Martin Maechler wrote:
>>>>>> David L Carlson <dcarlson using 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-bounces using r-project.org> On Behalf Of David L Carlson
>> Sent: Wednesday, May 2, 2018 3:51 PM
>> To: William Dunlap <wdunlap using tibco.com>; Kevin E. Thorpe <kevin.thorpe using utoronto.ca>
>> Cc: r-help mailing list <r-help using 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-bounces using r-project.org> On Behalf Of William Dunlap via R-help
>> Sent: Wednesday, May 2, 2018 12:28 PM
>> To: Kevin E. Thorpe <kevin.thorpe using utoronto.ca>
>> Cc: R Help Mailing List <r-help using 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.thorpe using 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.thorpe using utoronto.ca Tel: 416.864.5776 Fax: 416.864.3016
More information about the R-help
mailing list