Ich habe eine Liste von benannten Listen der folgenden Form aus einem JSON-Objekt:Liste benannter Listen data.frame
my_list = list(list(a = 10, b = "blah"),
list(a = 15, b = "stuff"))
Jedes Element der äußeren Liste ist eine benannte Liste und ich möchte es konvertieren zu einem data.frame der mit den Spaltennamen folgende Formular intakt:
a b
10 "blah"
15 "stuff"
auf der Oberfläche, kann ich das erreichen to_df = data.frame(do.call(rbind, my_list))
by doing.
Wenn ich jedoch eine individuelle Spalte to_df$a
oder to_df[,1]
zu extrahieren, um zu versuchen wäre, würde ich eine Liste anstelle eines Vektors erhalten, wie sie normalerweise von einem data.frame erwartet:
> to_df[,1]
[[1]]
[1] 10
[[2]]
[1] 15
Statt:
> to_df[,1]
[1] 10 15
Ein alter Eintrag auf der R-Mailingliste schlug die folgende Lösung vor: to_df = as.data.frame(t(sapply(my_list, rbind)))
. Dies wird jedoch nicht nur nicht über die Spaltennamen übertragen, sondern es besteht immer noch das Problem, dass bei der Betrachtung einzelner Spalten mit to_df[,1]
eine Liste anstelle eines Vektors zurückgegeben wird.
Was ist der beste Weg, dies zu erreichen? Gibt es einen dplyr
Weg?
EDIT: Vielen Dank für alle Lösungen, wie es scheint der Trick zu lapply
ist und verwandeln jedes Element der Liste zu einem data.frame
und sie dann zusammenzubinden dplyr oder do.call
verwenden. Alternativ funktioniert die meiste Arbeit mit einem einzigen Anruf zu rbindlist
.
Sie könnten versuchen, 'lapply (my_list, data.frame)%>% bind_rows()' –
Sie haben mehrere tragfähige Lösungen unten. Sie sollten jedoch beachten, dass 'to_df = data.frame (do.call (rbind, my_list))' nicht den Eindruck eines 'dat.frame' erweckt. Es scheint, Ihnen eine "Liste" zu geben, die auf der Ausgabe basiert, die Sie zeigen. –