如何将列表的元素合并到数据框中?在R

时间:2013-03-24 20:13:57

标签: r list dataframe

我有一个元素列表,比如这个

[[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]]...)

但我不知道如何将其应用于列表的所有条目。任何关于此的亮点都将受到赞赏。

非常感谢你。

蒂娜。

5 个答案:

答案 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)

我知道这是使用额外的套餐,但我的路径中通常有plyrreshape2

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)