从列表中的向量中提取元素

时间:2013-07-14 00:25:24

标签: r list dataframe

我有一个长度为30000的列表,每个列表元素包含一个长度为6的向量。

示例(长度仅为2):

trainLists <- list(c(1,2,3,4,5,6),c(7,8,9,10,11,12))

我希望将这些列表“扁平化”为数据框并创建6个因子(一个对应于列表中向量中的每个元素)。

因此,结果将是:

enter image description here

我可以通过诸如

之类的循环实现这一目标
for (i in 1:length(trainLists){
   factor1 [i] <- trainLists[[i]][1]
   factor2 [i] <- trainLists[[i]][2]
   factor3 [i] <- trainLists[[i]][3]
   factor4 [i] <- trainLists[[i]][4]
   factor5 [i] <- trainLists[[i]][5]
   factor6 [i] <- trainLists[[i]][6]
}

但速度非常慢。如何最好地完成这个?

1 个答案:

答案 0 :(得分:0)

正如评论中所指出的,你想要做的大部分工作是通过一个简单的do.call(rbind, ...)实现的,如下所示:

> trainLists <- list(c(1,2,3,4,5,6),c(7,8,9,10,11,12))
> trainLists
[[1]]
[1] 1 2 3 4 5 6

[[2]]
[1]  7  8  9 10 11 12

> do.call(rbind, trainLists)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    4    5    6
[2,]    7    8    9   10   11   12

向前迈出几步,你可以这样做:

cbind(example = seq_along(trainLists), 
      setNames(data.frame(do.call(rbind, trainLists)),
               paste0("Factor_", sequence(
                 max(sapply(trainLists, length))))))
#   example Factor_1 Factor_2 Factor_3 Factor_4 Factor_5 Factor_6
# 1       1        1        2        3        4        5        6
# 2       2        7        8        9       10       11       12