【问题标题】:Turn a large list into a rowwise dataframe将大列表转换为逐行数据框
【发布时间】:2017-08-23 15:19:56
【问题描述】:

我使用结构命令将大列表转换为数据框(我阅读了 SO 中的相关帖子):

l <- list()
l[[1]]<-c("2048","0","25","0","453826","65101","1503497087","1503497031","4_1R")     

l[[2]]<-c("406","0","26","0","453826","65101","1503497087","1503497055","4_1R")      

l[[3]]<-c("407","0","27","0","453826","65101","1503497087","1503497083","4_1R")     


n <- length(l[[1]])
DF <- structure(l, row.names = c(NA, -n), class = "data.frame")
print(DF)

但行排列像列。我可以使用转置数据框:

library(data.table)
DF <- transpose(DF)

没关系,

但是,“结构”中是否有任何选项表明我想要一个行绑定和行排序的数据框?

【问题讨论】:

  • 试试as.data.frame(do.call(cbind, l))
  • 你可以通过as.data.frame(l, col.names = c('COL1','COL2','COL3'))得到同样的结果
  • @akrun 我认为他们想要来自 data.table 的 do.call(rbind, l)rbindlist(lapply(l, as.list))
  • 你很好,但是对于需要几秒钟的大型列表(1GB),我需要一种更快的方法。 @Imo 您的 rbindlist 有效,但我无法弄清楚,我希望 rbindlist 能够对列表进行行绑定。
  • 嗯,transpose(setDT(l)) 和你一样快,我很确定。如果您想要更快,也许可以尝试以更好的方式读取数据..?

标签: r performance list dataframe data.table


【解决方案1】:

如果您取消列表,它会给您一个长向量,然后您可以将其放入矩阵中。将向量放入矩阵时,指定byrow=TRUE 将导致行绑定。矩阵可以转换为数据框。

> as.data.frame(matrix(unlist(l), nrow=3, byrow=TRUE))
    V1 V2 V3 V4     V5    V6         V7         V8   V9
1 2048  0 25  0 453826 65101 1503497087 1503497031 4_1R
2  406  0 26  0 453826 65101 1503497087 1503497055 4_1R
3  407  0 27  0 453826 65101 1503497087 1503497083 4_1R

【讨论】:

    猜你喜欢
    • 2019-08-30
    • 2022-09-24
    • 2022-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 2020-04-17
    相关资源
    最近更新 更多