2016-04-15 115 views
1

我正在构建了stacked column chart并试图找出改造我的CSV数据最彻底的方法:我怎样才能把这个csv转换成D3-ready的json?

data <- "apples oranges grapes 
    5 10 22 
    4 12 28 
    2 19 32 
    7 23 35 
    23 17 43" 
fruits <- read.table(text=data, header=TRUE) 

到多维JSON:

var dataset = [ 
     //apples 
     [ 
       { x: 0, y: 5 }, 
       { x: 1, y: 4 }, 
       { x: 2, y: 2 }, 
       { x: 3, y: 7 }, 
       { x: 4, y: 23 } 
     ], //oranges 
     [ 
       { x: 0, y: 10 }, 
       { x: 1, y: 12 }, 
       { x: 2, y: 19 }, 
       { x: 3, y: 23 }, 
       { x: 4, y: 17 } 
     ], // grapes 
     [ 
       { x: 0, y: 22 }, 
       { x: 1, y: 28 }, 
       { x: 2, y: 32 }, 
       { x: 3, y: 35 }, 
       { x: 4, y: 43 } 
     ] 
]; 

我可以使用rson“ s toJSON得到一个基本的阵列:

{ 
"apples":[5,4,2,7,23], 
"oranges":[10,12,19,23,17], 
"grapes":[22,28,32,35,43] 
} 

但我遇到了麻烦绕包装如何我会将其转换为我实际需要的格式。如果更直接,我很乐意进行转换,但我想弄清楚如何在R中生成它。

回答

0

我们可以创建一个listdata.frame s,通过cbind将行序列与每列(使用Map),请将list的名称设置为'fruits'的列名,并使用从jsonlite

library(jsonlite) 
toJSON(setNames(Map(function(x,y) data.frame(x,y), 
      list(1:nrow(fruits)), fruits), names(fruits))) 
{"apples": 
[ 
    {"x":1,"y":5}, 
    {"x":2,"y":4}, 
    {"x":3,"y":2}, 
    {"x":4,"y":7}, 
    {"x":5,"y":23} 
],"oranges": 
[ 
    {"x":1,"y":10}, 
    {"x":2,"y":12}, 
    {"x":3,"y":19}, 
    {"x":4,"y":23}, 
    {"x":5,"y":17} 
],"grapes": 
[ 
    {"x":1,"y":22}, 
    {"x":2,"y":28}, 
    {"x":3,"y":32}, 
    {"x":4,"y":35}, 
    {"x":5,"y":43} 
]}