2016-04-20 10 views
0

Ich möchte eine treemap mit einer JSON-Datei erstellen, die ich aus R (oder Python, ich könnte zu Python wechseln, wenn ich das wirklich nicht in R?). Die Daten sieht so etwas wie this:Wie erzeuge ich mehrstufige JSON mit R?

cat type pop 
Buddhism Other 116237936 
Christianity Anglican 36955033 
Christianity Catholic 391332035 
Christianity Orthodox 98501171 
Christianity Other 13674466 
Christianity Mahayana 160887585 
Islam Ibadhi 62273219 
Islam Shia 19436742 
Islam Sunni 49050320 
Judaism Conservative 1426350 
Judaism Orthodox 856827 
Judaism Other 7796835 
Judaism Reform 1929388 

Und ich brauche die json etwa so aussehen ...

{"name": "Buddhism", 
    "children": 
     {"name": "Other", "size": 116237936} 
    }, 
    { 
    "name": "Christianity", 
    "children": [ 
     {"name": "Anglican", "size": 36955033}, 
     {"name": "Catholic", "size": 391332035}, 
     {"name": "Orthodox", "size": 98501171}, 
     {"name": "Other", "size": 13674466}, 
     {"name": "Mahayana", "size": 160887585} 
    ] 
    } ... 

ich in der Dokumentation gesucht rjson und jsonlite und weder scheint es zu machen scheinen einfach.

+0

vielleicht diesen Beitrag http://stackoverflow.com/questions/31339805/converting-json-format-to-csv-to-upload-data-table-in-r-to-produce-d3-bubble -cha/31352770 # 31352770 wird helfen – timelyportfolio

Antwort

0

Vielleicht würde so etwas funktionieren? Split das Datenfeld in der Spalte cat, dann die erste Spalte von jedem resultierenden Datenframe löschen und in JSON konvertieren, indem toJSON aus dem jsonlite Paket verwendet wird.

JSONoutput <- jsonlite::toJSON(lapply(split(data, data$cat), function(x) {x[,-1]})) 
+0

Das wird sehr nah, obwohl ich jetzt '{" Buddhism "habe: [{" type ":" Other "," pop ": 116237936}]' und ich muss das in 'zwingen {"name": "Buddhismus", "Kinder": [{...}] 'Etwas, von dem man allerdings arbeiten kann. – Amanda

+0

Ich denke 'JSONoutput <- jsonlite :: toJSON (lapply (split (Daten, Daten $ cat), Funktion (x) {Liste (" Kinder "= x [, - 1])}))' könnte das tun für Sie. – user5219763

Verwandte Themen