我有一个长度为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]
}
但速度非常慢。如何最好地完成这个?
答案 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