Muy a menudo quiero convertir una lista en la que cada índice tenga tipos de elementos idénticos a un marco de datos. Por ejemplo, puede tener una lista:¿Cuál es la manera más eficiente de lanzar una lista como un marco de datos?
> 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
Quiero convertir esta lista para una trama de datos, donde cada elemento de índice es una columna. Lo natural (para mí) para ir es a es utilizar do.call
: lo suficientemente
> 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
sencillo, pero cuando intento jugar esta matriz como una trama de datos, las columnas siguen siendo elementos de la lista, en lugar de vectores:
> my.df<-as.data.frame(my.matrix, stringsAsFactors=FALSE)
> my.df[,1]
[[1]]
[1] 24267673
[[2]]
[1] 11561448
Actualmente, para obtener el molde trama de datos adecuadamente estoy interactuando sobre cada columna utilizando unlist
y as.vector
, a continuación, se refunde la trama de datos, tales como:
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)
Esto, sin embargo, parece muy ineficiente. ¿Hay alguna forma mejor de hacer esto?
Véase '? Data.table :: rbindlist' – marbel
A partir de 2017 se debe utilizar' your_list%>% REDUCIR (bind_rows) '' de 'purrr' – Zafar