May*_*you 6 performance r list dataframe
我有一个巨大的列表(700个元素),每个元素是一个长度为16,000的向量.我正在寻找一种有效的方法将列表转换为数据帧,方式如下(这只是一个模拟示例):
lst <- list(a = c(1,2,3), b = c(4,5,6), c = c(7,8,9))
Run Code Online (Sandbox Code Playgroud)
我要找的最终结果是:
# [,1] [,2] [,3]
#a 1 2 3
#b 4 5 6
#c 7 8 9
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的,但是没有按照我的意愿工作:
library(data.table)
result = rbindlist(Map(as.data.frame, lst))
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?请记住,我的真实示例有很大的维度,我需要一种相当有效的方法来执行此操作.
非常感谢你!
G. *_*eck 16
试试这个.我们假设L
所有组件的长度都相同n
,我们也假设没有行名:
L <- list(a = 1:4, b = 4:1) # test input
n <- length(L[[1]])
DF <- structure(L, row.names = c(NA, -n), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
我认为
lst <- list(a = c(1,2,3), b = c(4,5,6), c = c(7,8,9))
do.call(rbind,lst)
Run Code Online (Sandbox Code Playgroud)
作品.我不知道是否有一种更加有效的偷偷摸摸/危险/切角方式.
你也可以试试
m <- matrix(unlist(lst),byrow=TRUE,ncol=length(lst[[1]]))
rownames(m) <- names(lst)
as.data.frame(m)
Run Code Online (Sandbox Code Playgroud)
......也许它更快?
您可能无法在加快as.data.frame
步骤方面做很多事情.看着as.data.frame.matrix
,看看有什么可以被剥离,使其作为裸机越好,它似乎是症结也许在于列具有被复制到自己的个人列表中的元素:
for (i in ic) value[[i]] <- as.vector(x[, i])
Run Code Online (Sandbox Code Playgroud)
您可以尝试拆卸as.data.frame.matrix
以查看是否可以加快速度,但我猜这个操作是瓶颈.为了避开它,你必须找到行的列表映射数据到列的列表(可能是一些更快捷的方式Rcpp
解决?).
另一件需要考虑的事情是你是否真的需要一个数据框 - 如果你的数据属于同类型,你可以将结果保存为矩阵.无论如何,对大数据的矩阵运算要快得多......
归档时间: |
|
查看次数: |
17325 次 |
最近记录: |