r - 如何使用R中的子代写入json

标签 r format

我想将R data.frame转换为JSON对象,以便将其用于与d3.js进行数据可视化。我发现了很多问题,询问如何将JSON转换为R,但是很少有关于如何将数据从R写入JSON的问题。

一个特殊的问题是,JSON文件需要通过使用因素(即data.frame的列)进行嵌套。我认为从嵌套列表编写可能是一种解决方案,但是我已经无法从data.frame创建嵌套列表了:(

我已经举了一个例子:

这代表了我的data.frame(称为“ MyData”)。

ID  Location Station   Size Percentage
1     Alpha    Zeta    Big       0.63
2     Alpha    Zeta Medium       0.43
3     Alpha    Zeta  small       0.47
4     Alpha    Yota    Big       0.85
5     Alpha    Yota Medium       0.19
6     Alpha    Yota  small       0.89
7      Beta   Theta    Big       0.09
8      Beta   Theta Medium       0.33
9      Beta   Theta  small       0.79
10     Beta    Meta    Big       0.89
11     Beta    Meta Medium       0.71
12     Beta    Meta  small       0.59


现在,我想将其转换为这种有效的json格式,包括子节点:

   {
 "name":"MyData",
 "children":[
   {
     "name":"Alpha",
     "children":[
        {
           "name":"Zeta",
           "children":[
              {
                 "name":"Big",
                 "Percentage":0.63
              },
              {
                 "name":"Medium",
                 "Percentage":0.43
              },
              {
                 "name":"Small",
                 "Percentage":0.47
              }
           ]
        },
        {
           "name":"Yota",
           "children":[
              {
                 "name":"Big",
                 "Percentage":0.85
              },
              {
                 "name":"Medium",
                 "Percentage":0.19
              },
              {
                 "name":"Small",
                 "Percentage":0.89
              }
           ]
        }
    ]   
},
    {
     "name":"Zeta",
     "children":[
        {
           "name":"Big",
           "Percentage":0.63
        },
        {
           "name":"Medium",
           "Percentage":0.43
        },
        {
           "name":"Small",
           "Percentage":0.47
        }
     ]
  },
  {
     "name":"Yota",
     "children":[
        {
           "name":"Big",
           "Percentage":0.85
        },
        {
           "name":"Medium",
           "Percentage":0.19
        },
        {
           "name":"Small",
           "Percentage":0.89
        }
     ]
  }
  ]
 }


如果有人可以帮助我,我将非常感谢!
谢谢

最佳答案

这是一种更干净的递归方法:

require(RJSONIO)

makeList<-function(x){
  if(ncol(x)>2){
    listSplit<-split(x[-1],x[1],drop=T)
    lapply(names(listSplit),function(y){list(name=y,children=makeList(listSplit[[y]]))})
  }else{
    lapply(seq(nrow(x[1])),function(y){list(name=x[,1][y],Percentage=x[,2][y])})
  }
}


jsonOut<-toJSON(list(name="MyData",children=makeList(MyData[-1])))
cat(jsonOut)

关于r - 如何使用R中的子代写入json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12818864/

相关文章:

r - 连接列表中的 2 个列表

r - colSums() 的特殊用途,仅当缺少 1 个或更少时 na.rm = TRUE

r - 从 R 中的化学式中提取数字

r - R中的金字塔图

r - 透明度可以与 PostScript/EPS 一起使用吗?

python - 如何在 Python f 字符串中跳过十进制的尾随零?

python - 如何使用列表中的值格式化字符串?

减少上标字体大小 ggplot2 R

java - 如何将时间戳字符串转换为本地时间字符串?

PhpStorm 使用双制表符格式化多行数组