【发布时间】:2013-07-12 04:56:44
【问题描述】:
我有一个长度为 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]
}
但速度非常慢。如何最好地做到这一点?
【问题讨论】:
-
见
?rbind和?cbind。提示:首先在您的小数据上测试do.call(rbind, trainLists),看看它的作用。 -
哦,太酷了!谢谢!
-
要强制转换因子,您可以使用
sapply/lapply,但这可能需要再次调用as.data.frame。另一种选择类似于 plyr 包中的colwise(as.factor)(yourData)。 -
同样使用 plyr,您可以尝试
ldply(trainLists)将您的列表转换为数据框。