An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20111116/bac168da/attachment.pl>
List of lists to data frame?
6 messages · rkevinburton at charter.net, R. Michael Weylandt, Kevin Burton +3 more
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.
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.
On Wed, Nov 16, 2011 at 9: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.
Appending is very slow, and should be avoided. Instead, create a data frame of the correct size before starting the loop, and add each new bit into the appropriate place. There may well be a more efficient solution (I don't quite understand what your objective is), but simply getting rid of the rbind() within a loop will help.
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
Sarah Goslee http://www.functionaldiversity.org
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20111117/72073801/attachment.pl>
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