我正在学习 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
,]
此外,根据预测结果,表对象可以拥有更少的列和/或更少的行,我想我之前应该提到这一点 关于如何实现这一目标的任何想法?
答案 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