[R] List of lists to data frame?

Bert Gunter gunter.berton at gene.com
Thu Nov 17 15:53:49 CET 2011


I don't know if this is faster, but ...

out <- do.call(rbind,
   lapply(s, function(x)data.frame(x$category,x$name,as.vector(x$series))))

## You can then name the columns of out via names()

Note: No fancy additional packages are required.

-- Bert

On Wed, Nov 16, 2011 at 6:39 PM, Kevin Burton <rkevinburton at charter.net> wrote:
> Say I have the following data:
>
>> s <- list()
>> s[["A"]] <- list(name="first", series=ts(rnorm(50), frequency=10,
> start=c(2000,1)), category="top")
>> s[["B"]] <- list(name="second", series=ts(rnorm(60), frequency=10,
> start=c(2000,2)), category="next")
>
> If I use unlist since this is a list of lists I don't end up with a data
> frame. And the number of rows in the data frame should equal the number of
> time series entries. In the sample above it would be 110. I would expect
> that the name and category strings would be recycled for each row. My brute
> force code attempts to build the data frame by appending to the master data
> frame but like I said it is *very* slow.
>
> Kevin
>
> -----Original Message-----
> From: R. Michael Weylandt [mailto:michael.weylandt at gmail.com]
> Sent: Wednesday, November 16, 2011 5:26 PM
> To: rkevinburton at charter.net
> Cc: r-help at r-project.org
> Subject: Re: [R] List of lists to data frame?
>
> unlist(..., recursive = F)
>
> Michael
>
> On Wed, Nov 16, 2011 at 6:20 PM,  <rkevinburton at charter.net> wrote:
>>
>> I would like to make the following faster:
>>
>>        df <- NULL
>>        for(i in 1:length(s))
>>        {
>>                df <- rbind(df, cbind(names(s[i]), time(s[[i]]$series),
>> as.vector(s[[i]]$series), s[[i]]$category))
>>        }
>>        names(df) <- c("name", "time", "value", "category")
>>        return(df)
>>
>> The s object is a list of lists. It is constructed like:
>>
>> s[["object"]] <- list(. . . . . .)
>>
>> where "object" would be the name associated with this list
>> s[[i]]$series is a 'ts' object and s[[i]]$category is a name.
>>
>> Constructing this list is reasonably fast but to do some more
>> processing on the data it would be easier if it were converted to a data
> frame.
>> Right now the above code is unacceptably slow at converting this list
>> of lists to a data frame. Any suggestions on how to optimize this are
>> welcome.
>>
>> Thank you.
>>
>> Kevin
>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> 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.
>>
>
> ______________________________________________
> 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.
>



-- 

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm



More information about the R-help mailing list