Sehr oft möchte ich eine Liste konvertieren, in der jeder Index identische Elementtypen zu einem Datenrahmen hat. Zum Beispiel kann ich eine Liste haben:Was ist der effizienteste Weg, eine Liste als Datenrahmen zu erzeugen?
> 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
Ich möchte diese Liste zu einem Datenrahmen konvertieren, wobei jedes Indexelement eine Spalte. Die natürliche (für mich), was zu gehen ist, verwenden 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
einfach genug, aber wenn ich versuche, diese Matrix als Datenrahmen zu werfen, bleiben die Spalten Listenelemente, anstatt die Vektoren:
> my.df<-as.data.frame(my.matrix, stringsAsFactors=FALSE)
> my.df[,1]
[[1]]
[1] 24267673
[[2]]
[1] 11561448
Derzeit den Datenrahmen gegossen richtig erhalte ich über jede Spalte am Iterieren unlist
und as.vector
verwenden, dann den Datenrahmen als solche Neufassung:
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)
Dies scheint jedoch sehr ineffizient. Gibt es einen besseren Weg, dies zu tun?
siehe '? Data.table :: rbindlist' – marbel
Ab 2017 sollten Sie' verwenden your_list%>% reduce (bind_rows) '' von purrr' – Zafar