Hi, You can also try this: res<-do.call(rbind,lapply(l,function(x) data.frame(Name=names(l)[match.call()[[2]][[3]]],x))) row.names(res)<-1:nrow(res) head(res) # Name x y #1 A -0.7326214 -0.8871683 #2 A 0.4761960 0.8245219 #3 A 0.2362935 -0.1427997 #4 A 1.1684286 -0.3849312 #5 A -0.5440966 -0.8001079 #6 B 0.3652238 -0.9604054 A.K.
----- Original Message ----- From: Mark Payne <markpayneatw...@gmail.com> To: r-help@r-project.org Cc: Sent: Tuesday, October 30, 2012 4:16 AM Subject: [R] Named list of data.frames to data.frame with names Hi, I very frequently end up in a situation where I have a named list of data.frames that I wish to combine. e.g. l <- list(A=data.frame(x=rnorm(5), y=rnorm(5)), B=data.frame(x=rnorm(3),y=rnorm(3)), C=data.frame(x=rnorm(4),y=rnorm(4)), D=data.frame(x=rnorm(7),y=rnorm(7))) I would like to combine these data.frames into a single data.frame, with the column-names. This is easy with rbind and do.call l2 <- do.call(rbind,l) However, I would also like l2 to contain a column containing the names in the original list? Is there a more elegant way to do this than: l2 <- do.call(rbind,l) l2$name <- rep(names(l),times=sapply(l,nrow)) Mark ______________________________________________ R-help@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@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.