我有一个元素列表,比如这个
[[1]]
[1] 9.623571 5.334566 7.266597 6.510794 4.301958
[[2]]
[1] 9.693326 9.015892 1.266178 8.547392 4.326199
我希望将其转换为数据帧,如下所示:
V1 V2 V3 V4 V5
9.623571 5.334566 7.266597 6.510794 4.301958
9.693326 9.015892 1.266178 8.547392 4.326199
因此,列表条目中位于相同位置的所有元素都合并在同一列中。
它必须是与“rbind”相关的东西,因为结果就像在做:
rbind(list[[1]],list[[2]]...)
但我不知道如何将其应用于列表的所有条目。任何关于此的亮点都将受到赞赏。
非常感谢你。
蒂娜。
答案 0 :(得分:7)
因为还没有人提到这个:
library(data.table)
rbindlist(yourList)
非常快。
答案 1 :(得分:6)
试试这个:
as.data.frame(do.call(rbind, l))
其中,l <- list(1:5, 6:10)
# V1 V2 V3 V4 V5
# 1 1 2 3 4 5
# 2 6 7 8 9 10
答案 2 :(得分:2)
使用sapply
来获取您的目标。举个例子......
x <- list( 1:10 , letters[1:10])
as.data.frame( t( sapply(x , rbind) ) )
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1 1 2 3 4 5 6 7 8 9 10
# 2 a b c d e f g h i j
答案 3 :(得分:2)
我知道这是使用额外的套餐,但我的路径中通常有plyr
和reshape2
。
library(plyr)
x <- list( sample(1:10,10) , sample(1:10,10))
ldply(x) # list 2 data.frame
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 3 8 6 2 10 9 7 5 1 4
2 8 10 3 4 2 5 1 7 6 9
我发现当列表有名称时它特别有用:
names(x) <- c("hello","goodbye")
ldply(x)
.id V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 hello 3 8 6 2 10 9 7 5 1 4
2 goodbye 8 10 3 4 2 5 1 7 6 9
使用reshape2,您还可以快速将data.frame重新整形为可以使用ggplot2快速绘制的内容
library(reshape2)
melt(ldply(x),c(".id"))
.id variable value
1 hello V1 3
2 goodbye V1 8
3 hello V2 8
4 goodbye V2 10
5 hello V3 6
6 goodbye V3 3
7 hello V4 2
8 goodbye V4 4
9 hello V5 10
10 goodbye V5 2
11 hello V6 9
12 goodbye V6 5
13 hello V7 7
14 goodbye V7 1
15 hello V8 5
16 goodbye V8 7
17 hello V9 1
18 goodbye V9 6
19 hello V10 4
20 goodbye V10 9
对于非常大的数据集(未经测试的假设),这些解决方案都不是特别快,但在处理小型数据集(<10k行)时它们非常有用。
答案 4 :(得分:0)
一起使用Reduce
rbind
列表中的元素:
l <- list (a=c(9.623571, 5.334566, 7.266597, 6.510794, 4.301958),
b=c(9.693326, 9.015892, 1.266178, 8.547392, 4.326199))
# rbind the elements of the list.
Reduce(rbind, l)