Datensatzbasierte Liste / Objekt in Datenrahmen reduzieren

Bearbeiten: Diese Frage ist veraltet. DasJsonlite Paket wird automatisch abgeflacht.

Ich habe es mit Online-Datenströmen zu tun, die eine auf Datensätzen basierende Codierung haben, normalerweise in JSON. Die Struktur des Objekts (d. H. Die Namen in JSON) ist aus der API-Dokumentation bekannt. Werte sind jedoch meistens optional und nicht in jedem Datensatz vorhanden. Listen können neue Listen enthalten, und die Struktur ist manchmal ziemlich tief. Hier ist ein recht einfaches Beispiel für einige GPS-Daten:http://pastebin.com/raw.php?i=yz6z9t25. Beachten Sie, dass in den unteren Reihen die"l" Objekt fehlt, da kein GPS-Signal vorhanden ist.

Ich suche nach einer eleganten Möglichkeit, diese Objekte zu einem Datenrahmen zu reduzieren. Ich benutze derzeit so etwas:

library(RJSONIO)
library(plyr)

obj <- fromJSON("http://pastebin.com/raw.php?i=yz6z9t25", simplifyWithNames=FALSE, simplify=FALSE)
flatdata <- lapply(obj$data, as.data.frame);
mydf <- rbind.fill(flatdata)

Dies erledigt die Aufgabe, ist jedoch langsam und ein bisschen fehleranfällig. Ein Problem bei diesem Ansatz ist, dass ich mein Wissen über die Struktur (Objektnamen) in den Daten nicht verwende. stattdessen wird es aus den Daten abgeleitet. Dies führt zu Problemen, wenn in jedem Datensatz eine bestimmte Eigenschaft fehlt. In diesem Fall wird es überhaupt nicht im Datenrahmen angezeigt, sondern in einer Spalte mit NA-Werten. Dies kann zu Problemen im nachgelagerten Bereich führen. Zum Beispiel muss ich den Ortszeitstempel verarbeiten:

mydf$l.t <- structure(mydf$l.t/1000, class="POSIXct")

Dies führt jedoch zu einem Fehler bei einem Datensatz, in dem diel$t Objekt ist nicht da. Außerdem sowohl dieas.data.frame undrbind.fill mache die Dinge ziemlich langsam. Der Beispieldatensatz ist relativ klein. Anregungen für eine bessere Umsetzung? Eine robuste Lösung würde immer einen Datenrahmen mit denselben Spalten in derselben Reihenfolge ergeben, wobei nur die Anzahl der Zeilen variiert.

Bearbeiten: unter einem Datensatz mit mehr Metadaten. Es ist größer und tiefer verschachtelt:

obj <- fromJSON("http://www.stat.ucla.edu/~jeroen/files/output.json", simplifyWithNames=FALSE, simplify=FALSE)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage