2017-05-04 13 views
1

data.frameの形式のRのjsonliteパッケージを使用してオブジェクトの入れ子配列(JSON)を取得したいとします。私はここで例にdfデータフレームからオブジェクトのネストされた配列を作成する方法

library(jsonlite) 
time <- c(1,1,2,2) 
ps <- c("p1","p2","p1","p2") 
v1 <- c(5,6,7,8) 
v2 <- c(10,11,12,13) 
df <- data.frame(ps, v1,v2) 
toJSON(df) 

を与えてみましょうRにおけるデータフレームであると私はJSON形式でのオブジェクトの配列を取得:

[{"ps":"p1","v1":5,"v2":10}, 
{"ps":"p2","v1":6,"v2":11}, 
{"ps":"p1","v1":7,"v2":12}, 
{"ps":"p2","v1":8,"v2":13}] 

しかし、私は次のような出力を実現したいと思います。ここで、本質的に私は入れ子構造を持っています。長い形式でdfは、私が(JSONで)を達成したいと思います

df2 
    time ps v1 v2 
1 1 p1 5 10 
2 1 p2 6 11 
3 2 p1 7 12 
4 2 p2 8 13 

私の最終的な出力である

df2 <- data.frame(time,ps, v1,v2) 

のように見え、ここでは別のグループ化の引数(時間)のようなものを追加するフォーマットは

です
[{ 
    "time": "1" 
    "all_ps":[ 
    { 
     "ps":"p1", 
     "v1":5, 
     "v2":10  
    }, 
    { 
     "ps":"p2", 
     "v1":6, 
     "v2":11 
    }] 
    }, 
    { 
    "time": "2" 
    "all_ps":[ 
    { 
    "ps":"p1", 
    "v1":5, 
    "v2":10  
    }, 
    { 
    "ps":"p2", 
    "v1":6, 
    "v2":11 
    }] 
    } 
] 

all_psは、追加の構造またはグループに似ています。これはall_psが与えられていますが、希望の出力を取得するためにデータフレームに追加する方法がわかりません。 jsonliteを使用してRでこれをどのように達成できますか?

答えて

1

time列の内容を知らなくても、あなたのデータフレームを分割する別の方法:

library(jsonlite) 
ansLs <- lapply(split(df2, df2$time), 
    function(x) list(time=as.character(x$time[1]), all_ps=x[-1])) 
toJSON(unname(ansLs), auto_unbox = TRUE) 
+0

は、私はあなたを聞いても、私はこのような数値そのコードを微調整することができる方法toJsonを呼び出した後の値は二重引用符で囲まれませんか?私。 "v2":11ではなく "v2": "11" – math

+0

今すぐRにアクセスできない。 data.frameはすでに正しいデータ型になっていましたか?すでに存在する場合は、all_psを明示的に作成する必要があります。 – chinsoon12

1

これは動作します:

library(magrittr) 
library(jsonlite) 
lapply(as.list(1:2), function(x) list(time = as.character(x), 
             "all_ps" = df[time == x, ])) %>% 
    toJSON(auto_unbox = TRUE) 
関連する問題