将R表转换为JSON字符串

时间:2016-07-27 21:16:13

标签: json r

我正在学习 R ,我正在使用 R 进行Predictive Analysis API,我正在使用管道工来创建Web API服务。我需要检索我的朴素贝叶斯预测结果的混淆矩阵,但遗憾的是我找不到任何方法将结果对象(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
,]

此外,根据预测结果,表对象可以拥有更少的列和/或更少的行,我想我之前应该提到这一点 关于如何实现这一目标的任何想法?

3 个答案:

答案 0 :(得分:2)

将数据转换为长格式并转换为json。 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
#   },
#
#   ...

测试输入:

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转换表对象。

答案 1 :(得分:2)

@thelatemail给出的答案有效并给了我正确的字符串

这是答案

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

感谢大家的帮助

答案 2 :(得分: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