2016-07-27 9 views
1

Ich lerne R und ich mache einen Predictive Analysis-API R, ich bin mit Klempnern einen Web-API-Dienst zu erstellen. Ich muss die Verwirrungsmatrix meines Naive Bayes-Vorhersageergebnisses abrufen, aber leider konnte ich keine Methode finden, das resultierende Objekt (R-Tabellenobjekt) in eine JSON-Zeichenfolge umzuwandeln.Konvertieren R Tabelle zu JSON-String

Eine meiner Optionen besteht darin, die JSON-Zeichenfolge manuell zu erstellen, aber ich kann den Weg der Iteration durch die Tabelle nicht finden, einschließlich der Zeilen- und Spaltennamen.

Dies ist ein Beispiel meines Tabellenobjekts:

  Active Inactive Hotlined Suspended 
Active  1  0   2   1 
Inactive  0  2   0   0 
Hotlined  3  0   3   2 
Suspended 0  5   0   4 

Und die Ausgabe, die ich brauche, um diese ähnlich ist:

[ 
    {column:'Active',row:'Active',value:1}, 
    {column:'Inactive',row:'Active',value:0}, 
    {column:'Hotlined',row:'Active',value:2}, 
    {column:'Suspended',row:'Active',value:1}, 
    .......... #The same for next rows 
,] 

Auch kann das Tabellenobjekt weniger Spalten und/oder weniger Zeilen entsprechend dem Vorhersageergebnis, ich denke ich sollte das vor erwähnen Irgendeine Idee wie ich das erreichen kann?

+0

Sie könnten ein Nest verwenden ed for-Schleife, um durch die Zeilen und Spalten der Tabelle zu gehen. – tluh

+0

Sie benötigen genau diese JSON-Struktur? –

+0

@tluh Ich kann die Tabellendaten durchlaufen, aber ich brauche auch die Spalten- und Zeilennamen und das kann ich nicht erreichen –

Antwort

2

Die Antwort von @thelatemail Arbeiten gegeben und gibt mir den richtigen String

dies die Antwort ist

toJSON(setNames(as.data.frame(tab),c("row","column","value"))) 

Vielen Dank an alle für die Hilfe

+0

Awesome - froh zu hören, es hat funktioniert. – thelatemail

2

Wandeln Sie Ihre Daten in ein langes Format um und konvertieren Sie sie in json. Beispiel mit tidyr:

library(dplyr) 
library(tidyr) 
library(jsonlite) 

df1 %>% 
    dplyr::add_rownames("row") %>% 
    tidyr::gather(column, value, -row) %>% 
    arrange(row) %>% 
    select(column, row, value) %>% 
    toJSON(pretty = TRUE) 

# [ 
# { 
#  "column": "Active", 
#  "row": "Active", 
#  "value": 1 
# }, 
# { 
#  "column": "Inactive", 
#  "row": "Active", 
#  "value": 0 
# }, 
# { 
#  "column": "Hotlined", 
#  "row": "Active", 
#  "value": 2 
# }, 
# 
# ... 

Testeingang erstellt mit:

df1 <- read.table(text = " 
      Active Inactive Hotlined Suspended 
    Active  1  0   2   1 
    Inactive  0  2   0   0 
    Hotlined  3  0   3   2 
    Suspended 0  5   0   4 
" 
) 

ich in Ihrem Fall denken, werden Sie Ihre Tabellenobjekt mit as.data.frame konvertieren.

+0

Vielen Dank, es ist wirklich in der Nähe, aber funktioniert nicht richtig ... Wenn ich die Umwandlung as.data.frame, es erstellt etwas wie folgt: var1 var2 Freq Active Active 0 Für jede Zeile weiß ich nicht, ob das so sein soll. Und wenn ich die Methode anwende, die Sie vorgeschlagen haben, ist der resultierende JSON wie folgt: [{ "Spalte" : "Var1", "row": "1", "Wert": "Active" }, .... Und in einigen anderen Fällen mischt es die Spalten-, Zeilen- und Wert-Informationen ...Die Anzahl der Spalten und Zeilen kann je nach Modell variieren. –

+0

Können Sie ein Beispielobjekt "ausgeben"? – bergant

0
require(rjson) 
Active Inactive Hotlined Suspended 
Active  1  0   2   1 
Inactive  0  2   0   0 
Hotlined  3  0   3   2 
Suspended 0  5   0   4 

d <- read.table(con <- file("clipboard"), header = T) 

json <- toJSON(d) 

d.json <- fromJSON(json) 

data.frame(Active = d.json$Active, 
      Inactive = d.json$Inactive, 
      Hotlined = d.json$Hotlined, 
      Suspended = d.json$Suspended) 
Active Inactive Hotlined Suspended 
1  1  0  2   1 
2  0  2  0   0 
3  3  0  3   2 
4  0  5  0   4 
Verwandte Themen