2016-07-27 110 views
1

我在學習R我正在使用R做預測分析API,我正在使用管道工來創建Web API服務。我需要檢索我樸素貝葉斯預測結果的混淆矩陣,但不幸的是我找不到任何方法將結果對象(R表對象)轉換爲JSON字符串。將R錶轉換爲JSON字符串

我的選擇之一是手動創建JSON字符串,但我找不到遍歷表的方式,包括行和列名稱。

這是我的表對象的示例:

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

和輸出,我需要的是與此類似:

[ 
    {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 
,] 

此外,表對象可以有少列和/或根據預測結果減少行數,我想我應該在之前提到這個 有關我如何實現這一點的任何想法?

+0

你可以使用一個巢編輯循環以遍歷表格的行和列。 – tluh

+0

你需要這個JSON結構嗎? –

+0

@tluh我可以遍歷表數據,但我也需要列和行的名稱,我不能實現這一點 –

回答

2

通過@thelatemail作品給出的答案,並給了我正確的字符串

這就是答案

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

感謝所有的幫助

+0

真棒 - 很高興聽到它的工作。 – thelatemail

2

將您的數據轉換爲長格式並轉換爲json。 實例與tidyr:

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 
" 
) 

我覺得你的情況,你將有你的表對象轉換與as.data.frame

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 
# }, 
# 
# ... 

測試輸入與創建。

+0

非常感謝,它非常接近,但工作不正常......當我做 as.data.frame轉換時,它創建如下: var1 var2 Freq Active Active 0 對於每一行,我不知道它是如何應該的,並且當我應用您建議的方法,結果json是這樣的: [{「 」column「 :「Var1」, 「row」:「1」, 「value」:「Active」 },... 而在其他一些情況下,它混​​合列,行和值信息...列數和行數可能因型號而異 –

+0

您可以輸入一個樣品對象嗎? – 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