2016-04-08 7 views
1

I in R folgenden Datenrahmen habe:Convert R data.frame auf bestimmte JSON-Datei für Heatmap Konzept

df <- data.frame(RowNames <- c("FirstCol","SecondCol","ThirdCol","FourthCol"), 
           FirstCol <- c(0.4,0.5,0.1,0.2), 
           SecondCol <- c(0.8,0.6,0.4,0.1), 
           ThirdCol <- c(0.7,0.1,0.2,0.6), 
           FourthCol <- c(0.5,0.3,0.1,0.9)) 
names(df) <- c("RowNames", "FirstCol", "SecondCol", "ThirdCol", "FourthCol") 

Und Ich mag diesen Datenrahmen in sehr spezifische JSON-Datei für weiteres Heatmap Zeichnung Konzept konvertieren:

# desired output 
{ 
    "x": [ "FirstCol", "SecondCol", "ThirdCol", "FourthCol" ], 
    "y": [ "FourthCol", "ThirdCol", "SecondCol", "FirstCol" ], 
    "z": [ 
    [ 0.2, 0.1, 0.6, 0.9 ], 
    [ 0.1, 0.4, 0.2, 0.1 ], 
    [ 0.5, 0.6, 0.1, 0.3 ], 
    [ 0.4, 0.8, 0.7, 0.5 ]] 
} 

Gibt es einen bestimmten Ansatz, wie geht das am einfachsten? Ich habe wirklich keine Ahnung, wo ich anfangen soll. Vielen Dank für Ihre Hilfe im Voraus.

+0

Es ist nicht klar, wie die 'z' Werte ausgewählt werden. Vielleicht 'library (jsonlite); toJSON (Liste (Namen (df) [- 1], rev (Namen (df) [- 1]), unlist (df [-1], use.names = FALSE)))' – akrun

+0

Z-Werte scheinen für das Heatmap-Konzept entgegengesetzt zu sein. Also von der letzten Reihe bis zum ersten. – SmithiM

+0

und gibt es eine Möglichkeit, "x" hinzuzufügen: und "y": und "z": vor eckigen Klammern? – SmithiM

Antwort

0

Wir toJSON von jsonlite verwenden, indem die names platzieren und die Daten (von der letzten Reihe der ersten Reihe umgekehrt) in einer benannten list.

library(jsonlite) 
toJSON(list(x=names(df)[-1], y=rev(names(df)[-1]), 
     z=`dimnames<-`(as.matrix(df[nrow(df):1,-1]), NULL))) 
{ 
"x":["FirstCol","SecondCol","ThirdCol","FourthCol"], 
"y":["FourthCol","ThirdCol","SecondCol","FirstCol"], 
"z":[[0.2,0.1,0.6,0.9], 
     [0.1,0.4,0.2,0.1], 
     [0.5,0.6,0.1,0.3], 
     [0.4,0.8,0.7,0.5]] 
}