1

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

示例(长度仅为 2):

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

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

因此,结果将是:

在此处输入图像描述

我可以用一个循环来完成这个,比如

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]
}

但它非常慢。如何最好地做到这一点?

4

1 回答 1

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
于 2014-09-05T11:55:11.937 回答