Skip to content
Back to formatted view

Raw Message

Message-ID: <1351621265.7292.YahooMailNeo@web142602.mail.bf1.yahoo.com>
Date: 2012-10-30T18:21:05Z
From: arun
Subject: Named list of data.frames to data.frame with names
In-Reply-To: <CAGBzUO9N1Bn_sQw6yS9YCB2FwkUur45KRBgrm5iK0JW2SEdTXQ@mail.gmail.com>

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 <markpayneatwork at gmail.com>
To: r-help at 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 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.