【发布时间】:2012-04-02 10:38:20
【问题描述】:
我有基于此one 的后续问题。
我使用df <- ldply(listOfDataFrames, data.frame)将12000+个数据框的列表合并为一个,但是由于列表中的每个数据框都没有标识符,我需要知道哪个数据框来自哪个列表。
我知道我可以使用ldply(test,nrow)创建另一个数据框,然后使用for-loop添加列表名称,但似乎有点慢,不知道有没有更快的方法。谢谢。
【问题讨论】:
我有基于此one 的后续问题。
我使用df <- ldply(listOfDataFrames, data.frame)将12000+个数据框的列表合并为一个,但是由于列表中的每个数据框都没有标识符,我需要知道哪个数据框来自哪个列表。
我知道我可以使用ldply(test,nrow)创建另一个数据框,然后使用for-loop添加列表名称,但似乎有点慢,不知道有没有更快的方法。谢谢。
【问题讨论】:
我没有适合你的 plyr 解决方案,但我通常在 base R 中这样做。
> a <- list(data.frame(a=runif(5), b=runif(5)), data.frame(a=runif(5), b=runif(5)), data.frame(a=runif(5), b=runif(5)))
> a
[[1]]
a b
1 0.2994804 0.2681471
2 0.3223587 0.3663688
3 0.2662296 0.2941038
4 0.8041538 0.2991932
5 0.6860321 0.0872916
[[2]]
a b
1 0.84966749 0.01750988
2 0.19320093 0.05274077
3 0.63218616 0.77222663
4 0.00773626 0.53163878
5 0.19965884 0.50740204
[[3]]
a b
1 0.2915164 0.65905466
2 0.5676906 0.01094598
3 0.5689014 0.58943383
4 0.7937997 0.75535177
5 0.2304010 0.84012697
> indices <- lapply(a, nrow)
> a.all <- do.call(rbind, a)
> a.all$index <- rep(1:length(a), indices)
> a.all
a b index
1 0.29948042 0.26814714 1
2 0.32235868 0.36636880 1
3 0.26622956 0.29410382 1
4 0.80415381 0.29919316 1
5 0.68603208 0.08729160 1
6 0.84966749 0.01750988 2
7 0.19320093 0.05274077 2
8 0.63218616 0.77222663 2
9 0.00773626 0.53163878 2
10 0.19965884 0.50740204 2
11 0.29151644 0.65905466 3
12 0.56769063 0.01094598 3
13 0.56890138 0.58943383 3
14 0.79379972 0.75535177 3
15 0.23040098 0.84012697 3
【讨论】:
我猜您也可以使用reshape2。我通常使用melt:
library(reshape2)
#Thanks Roman
a <- list(data.frame(a=runif(5), b=runif(5)), data.frame(a=runif(5), b=runif(5)), data.frame(a=runif(5), b=runif(5)))
melt(a)
> melt(a, id.vars = 1:2)
a b L1
1 0.325542 0.914199 1
2 0.947871 0.719881 1
3 0.683925 0.574832 1
4 0.715612 0.646920 1
...
【讨论】:
同样,使用 base R,您可以命名列表项:
# Also thank you Roman
a <- list(data.frame(a=runif(5), b=runif(5)), data.frame(a=runif(5),
b=runif(5)), data.frame(a=runif(5), b=runif(5)))
names(a)<-seq_along(a)
myAns<-do.call("rbind",a)
那么行名对应列表项的名称。
row.names(myAns)
【讨论】: