2017-11-15 3 views
0

を作成します。次のように私は、データフレームを持つマルチエレメントJSON

item <- c(rep.int("Item ID 1", 4), rep.int("Item ID 2", 3)) 
links <- c("A", "B", "C", "D", "A", "E", "F") 

df <- as.data.frame(cbind(item, links)) 

私は各linksキーに対して複数の値をjsonにこれを変換するために探していますと、(正しい用語ということでしょうか?)

期待JSONは

{ 
    "items": [ 
     { 
      "type": "item", 
      "name": "Item ID 1", 
      "links": [ 
       "A", 
       "B", 
       "C", 
       "D" 
      ] 
     }, 
     { 
      "type": "item", 
      "name": "Item ID 2", 
      "links": [ 
       "A", 
       "E", 
       "F" 
      ] 
     } 
} 

これはd3.js可視化のために必要とされているが、私は肝炎今までそれを変換することはできませんでした。

答えて

1

リストとしてデータを操作:

library(tidyverse) 
library(jsonlite) 

js <- split(df$links, df$item) %>%      # use split to group links by item 
    imap(~ list(type = "item", name = .y, links = .x)) %>% # add extra fields to each item 
    {list(items = unname(.))} %>%      # add the top level items key 
    toJSON(auto_unbox = TRUE)  # convert to json unbox single element vector to scalar 

prettify(js) 
{ 
    "items": [ 
     { 
      "type": "item", 
      "name": "Item ID 1", 
      "links": [ 
       "A", 
       "B", 
       "C", 
       "D" 
      ] 
     }, 
     { 
      "type": "item", 
      "name": "Item ID 2", 
      "links": [ 
       "A", 
       "E", 
       "F" 
      ] 
     } 
    ] 
} 

data.frameとしてデータを操作:追加の列が '1であるかどう

js <- df %>% 
    group_by(item) %>% nest() %>% 
    mutate(type = "item", data = map(data, "links")) %>% 
    select(type, name = item, links = data) %>% 
    list(items = .) %>% 
    toJSON(dataframe = "rows") 

prettify(js) 
{ 
    "items": [ 
     { 
      "type": "item", 
      "name": "Item ID 1", 
      "links": [ 
       "A", 
       "B", 
       "C", 
       "D" 
      ] 
     }, 
     { 
      "type": "item", 
      "name": "Item ID 2", 
      "links": [ 
       "A", 
       "E", 
       "F" 
      ] 
     } 
    ] 
} 
+0

:1' NAME' 'とのマッピング(たとえば'desc')、それをjson自体に追加する簡単な方法はありますか?それがあなたに私が求めているものを視覚化することを容易にするならば、私はその質問を修正することができます。 – Drj

+0

心配しないでください。あなたの2番目のアプローチでそれを実現できました。どうもありがとう。 – Drj

関連する問題