Acoplar lista / objeto basado en registro en el marco de datos

Edición: esta pregunta está desactualizada. losjsonlite El paquete se aplana automáticamente.

Estoy tratando con flujos de datos en línea que tienen codificación basada en registros, generalmente en JSON. La estructura del objeto (es decir, los nombres en el JSON) se conoce a partir de la documentación de la API, sin embargo, los valores son en su mayoría opcionales y no están presentes en todos los registros. Las listas pueden contener nuevas listas, y la estructura a veces es bastante profunda. Aquí hay un ejemplo bastante simple de algunos datos de GPS:http://pastebin.com/raw.php?i=yz6z9t25. Tenga en cuenta que en las filas inferiores, la"l" Falta el objeto debido a que no hay señal de GPS.

Estoy buscando una forma elegante de aplanar estos objetos en un marco de datos. Actualmente estoy usando algo como esto:

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)

Esto hace el trabajo, sin embargo, es lento y propenso a errores de bits. Un problema con este enfoque es que no estoy usando mi conocimiento sobre la estructura (nombres de objetos) en los datos; en cambio, se deduce de los datos. Esto conduce a problemas cuando una determinada propiedad está ausente en todos los registros. En este caso, no aparecerá en el marco de datos, en lugar de una columna con valores de NA. Esto puede llevar a problemas posteriores. Por ejemplo, necesito procesar la marca de tiempo de ubicación:

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

Sin embargo, esto dará lugar a un error en el caso de un conjunto de datos en el que ell$t el objeto no está allí. Además tanto elas.data.frame yrbind.fill hacer las cosas bastante lentas El conjunto de datos de ejemplo es relativamente pequeño. ¿Alguna sugerencia para una mejor implementación? Una solución robusta siempre produciría un marco de datos con las mismas columnas en el mismo orden, y donde solo el número de filas varía.

Edición: debajo de un conjunto de datos con más metadatos. Es más grande en tamaño y está anidado más profundamente:

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta