将大型列表转换为data.frame

May*_*you 3 performance memory-management r dataframe

我试图将13,000个元素的列表转换zoo为数据帧,每个元素都是nr = 230和ncol = 4 的对象.

我试过了setattr(mylist, 'class', 'data.frame'),但它产生了一个巨大的NA矢量.我也尝试过该包中的quickdf(mylist)功能plyr,但这也无效.

do.call(rbind.data.frame, mylist)类型的方法是非常慢的,因此不能在这种情况下的一个选项.

有关将此类列表转换为数据帧的最有效方法的任何建议吗?

Wol*_* Wu 9

使用data.table包中的rbindlist.

data <- matrix(data = 1, nrow = 230, ncol = 4)
lstData <- rep(list(data), 16000)

library(data.table)
lstData <- Map(as.data.frame, lstData)
dfrData <- rbindlist(lstData)


system.time(dfrData <- rbindlist(lstData))
user  system elapsed 
0.12    0.03    0.15 
Run Code Online (Sandbox Code Playgroud)

  • 1.对于时间序列,我会使用xts.它基本上是动物园,但速度优化.你可以为日期本身做rbindlist.`lstIndex < - Map(as.data.frame,Map(index,lstData))dfrIndex < - rbindlist(lstIndex)setnames(dfrIndex,"Date")lstData < - Map(as.data.frame,lstData)dfrData < - rbindlist(lstData)zooResult < - as.zoo(dfrData,as.Date(dfrIndex $ Date))` (2认同)