将列表作为数据框架最有效的方法是什么? [英] What is the most efficient way to cast a list as a data frame?
问题描述
很多时候,我想转换一个列表,其中每个索引具有相同的元素类型到数据帧。例如,我可能有一个列表:
Very often I want to convert a list wherein each index has identical element types to a data frame. For example, I may have a list:
> my.list
[[1]]
[[1]]$global_stdev_ppb
[1] 24267673
[[1]]$range
[1] 0.03114799
[[1]]$tok
[1] "hello"
[[1]]$global_freq_ppb
[1] 211592.6
[[2]]
[[2]]$global_stdev_ppb
[1] 11561448
[[2]]$range
[1] 0.08870838
[[2]]$tok
[1] "world"
[[2]]$global_freq_ppb
[1] 1002043
我想将此列表转换为数据帧, index元素是一列。自然(对我)的事情是使用 do.call
:
I want to convert this list to a data frame where each index element is a column. The natural (to me) thing to go is to is use do.call
:
> my.matrix<-do.call("rbind", my.list)
> my.matrix
global_stdev_ppb range tok global_freq_ppb
[1,] 24267673 0.03114799 "hello" 211592.6
[2,] 11561448 0.08870838 "world" 1002043
直截了当,但是当我尝试将此矩阵转换为数据帧时,列仍然是列表元素,而不是向量:
Straightforward enough, but when I attempt to cast this matrix as a data frame, the columns remain list elements, rather than vectors:
> my.df<-as.data.frame(my.matrix, stringsAsFactors=FALSE)
> my.df[,1]
[[1]]
[1] 24267673
[[2]]
[1] 11561448
目前,为了正确地获取数据框架,我使用 unlist $来迭代每一列c $ c>和
as.vector
,然后重新创建数据框:
Currently, to get the data frame cast properly I am iterating over each column using unlist
and as.vector
, then recasting the data frame as such:
new.list<-lapply(1:ncol(my.matrix), function(x) as.vector(unlist(my.matrix[,x])))
my.df<-as.data.frame(do.call(cbind, new.list), stringsAsFactors=FALSE)
但是,似乎效率很低。有没有更好的方法呢?
This, however, seem very inefficient. Is there are better way to do this?
推荐答案
我想你想要的:
> do.call(rbind, lapply(my.list, data.frame, stringsAsFactors=FALSE))
global_stdev_ppb range tok global_freq_ppb
1 24267673 0.03114799 hello 211592.6
2 11561448 0.08870838 world 1002043.0
> str(do.call(rbind, lapply(my.list, data.frame, stringsAsFactors=FALSE)))
'data.frame': 2 obs. of 4 variables:
$ global_stdev_ppb: num 24267673 11561448
$ range : num 0.0311 0.0887
$ tok : chr "hello" "world"
$ global_freq_ppb : num 211593 1002043
这篇关于将列表作为数据框架最有效的方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!