R-Liste(structure(list ())), um Daten-Frames

Habe ich eine JSON-Datenquelle, die eine Liste von hashes:

[
  { "a": "foo",
    "b": "sdfshk"
  },
  { "a": "foo",
    "b": "ihlkyhul"
  }
]

Benutze ich fromJSON() im rjson - Paket zu konvertieren, dass zu einem R-Daten-Struktur. Es gibt:

list(
  structure(list(a = "foo", b = "sdfshk"), .Names = c("a", "b")),
  structure(list(a = "foo", b = "ihlkyhul"), .Names = c("a", "b"))
)

Ich brauche, um diese in eine R Daten-frame, aber data.frame() Wendungen, die in eine einzelne Zeile-Daten-frame mit vier Spalten statt eines 2x2-Daten-frame als erwartet. Mir fehlt der R-fu zu tun-die Transformation vom einen zum anderen, obwohl es so aussieht, sollte es Recht einfach sein.

Bonus Punkte:

Das eigentliche problem ist ein bisschen komplexer, weil die JSON-Daten, die Quelle ist nicht so regelmäßig, wie ich oben zeigen. Die Objekte, die es gibt unterscheiden sich in Typ. Das ist das Feld gesetzt, in jedem kann ein paar verschiedene Arten:

[
  { "a": "foo",
    "b": "asdfhalsdhfla"
  },
  { "a": "bar",
    "c": "akjdhflakjhsdlfkah",
    "d": "jfhglskhfglskd",
  },
  { "a": "foo",
    "b": "dfhlkhldsfg"
  }
]

Wie Sie sehen können, das Feld "a" in jedem Objekt ist ein Typ-tag, der angibt, welche anderen Felder des Objekts.

Bin ich nicht zu allem, wie die Lösung meistert diese.

Wäre es nicht schrecklich sein, wenn die beiden Objekt-Typen wurden nur mooshed zusammen, so erhalten Sie die Spalten a, b, c, und d, und die Zeilen einfach haben N/A oder NULL Werte, wo die JSON-source-Objekt nicht den Wert für ein gegebenes Feld. Ich glaube, ich kann reinigen die daraus resultierenden Daten-frame mit subset(df, a == "foo"). Ich werde am Ende einige leere Spalten, die Art und Weise, aber es wird nicht egal, zu meinem Programm.

Wäre es besser, wenn die Lösung bietet eine Möglichkeit, wählen Sie die JSON-source-Reihen gehen in das Daten-frame und die abgelehnt bekommen, so dass das Ergebnis nur die Spalten und Zeilen auch tatsächlich benötigt.

InformationsquelleAutor Warren Young | 2012-09-20
Schreibe einen Kommentar