将R表格转换为JSON字符串

3
我正在学习R,并使用R创建一个预测分析API。我正在使用plumber创建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
,]

此外,根据预测结果,表格对象可能会拥有更少的列和/或更少的行。在此之前,我认为我应该提到这一点。你知道如何实现吗?

你可以使用嵌套的 for 循环来遍历表格的行和列。 - tluh
你需要确切的这个JSON结构吗? - Martin Schmelzer
@tluh 我可以循环遍历表格数据,但我也需要列和行的名称,而我无法实现这一点。 - Oscar_sgc
@MartinDabbelJuSmelter 是的,或者接近这样... 我需要重新构建结果矩阵,实际上,矩阵的列和行数量会根据预测结果而改变。 - Oscar_sgc
2
toJSON(setNames(as.data.frame(tab),c("row","column","value"))) 这样可以吗? - thelatemail
@thelatemail 那完全有效...非常感谢你 - Oscar_sgc
3个回答

4

@thelatemail给出的答案是正确的,可以得到我需要的字符串

这就是答案

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

感谢所有人的帮助。

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将表格对象转换为数据框。


非常感谢,这已经很接近了,但是还没有正确运行... 当我进行 as.data.frame 转换时,它会创建类似于以下内容的东西:var1 var2 Freq Active Active 0对于每一行,我不知道它是否应该是这样的。当我应用你建议的方法时,生成的 JSON 如下所示: [ { "column": "Var1", "row": "1", "value": "Active" },.... 在其他一些情况下,它混合了列、行和值信息... 列和行的数量可能根据模型而变化。 - Oscar_sgc
你能否使用 dput 命令上传一个样本对象? - 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接