3

我有一个元素列表,像这样

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

但我不知道如何将它应用于列表的所有条目。对此的任何说明将不胜感激。

非常感谢您提前。

蒂娜。

4

5 回答 5

7

因为还没有人提到这一点:

 library(data.table)
 rbindlist(yourList)

非常快。

于 2013-03-24T20:39:21.847 回答
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
于 2013-03-24T20:23:00.993 回答
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
于 2013-03-24T20:23:24.137 回答
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 行)时非常有用。

于 2013-03-24T20:38:31.917 回答
0

将列表Reducerbind的元素一起使用:

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)
于 2013-03-24T20:26:26.553 回答