2016-07-27 137 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