2016-05-13 4 views
0

私はこれらのイベント内のイベントやログをJSONファイルを持っているが、一例は以下のようになります。あなたが見ることができるようにRの特定のエンティティを解析するには?

{ 
    "sessionEvents": [ 
    { 
     "u": "BC0F6A3A2840B6F48386BABC5F34B480BA4F9929", 
     "v": "0.1.0", 
     "dv": "Unidentified", 
     "t": 1462924115818, 
     "uid": "", 
     "len": 148012, 
     "by": 0, 
     "g": "U", 
     "cy": "PH", 
     "cr": "Unknown", 
     "dm": "O+ Xfinit", 
     "lat": 0.0, 
     "lon": 0.0, 
     "l": [ 
     { 
      "e": "100_SESSION_START", 
      "o": 24, 
      "d": 147988, 
      "p": { 
      "User_Timezone": "-08:00", 
      "Session_nb": "0", 
      "Energy_Balance": "89", 
      "Global_Playtime": "0", 
      "Device_id": "75e64b654c01949", 
      "Game_Language": "en", 
      "Connection_Type": "WIFI", 
      "User_Country": "US", 
      "Push_Impact": "None" 
      } 
     }, 
     { 
      "e": "008_TUTORIAL_STEP_OTHER", 
      "o": 7561, 
      "d": 0, 
      "p": { 
      "Screen_id": "scene_screen", 
      "Misclicks": "0", 
      "Tutorial_Step": "19", 
      "Average_Time_Per_Frame": "0", 
      "Total_Time": "0" 
      } 
     } 
     ] 
    }, 
    { 
     "u": "C950FC733D883E11E36E15A705E05A3CC7748C3A", 
     "v": "0.1.0", 
     "dv": "OPPO Mirror 5", 
     "t": 1462908916463, 
     "uid": "", 
     "len": 5368, 
     "by": 0, 
     "g": "U", 
     "cy": "PH", 
     "cr": "Unknown", 
     "dm": "A51w", 
     "lat": 0.0, 
     "lon": 0.0, 
     "l": [ 
     { 
      "e": "100_SESSION_START", 
      "o": 169, 
      "d": 5199, 
      "p": { 
      "User_Timezone": "-08:00", 
      "Session_nb": "0", 
      "Energy_Balance": "0", 
      "Global_Playtime": "0", 
      "Device_id": "d0de71513e48fba", 
      "Game_Language": "en", 
      "Connection_Type": "WIFI", 
      "User_Country": "US", 
      "Push_Impact": "None" 
      } 
     } 
     ] 
    } 
    ] 
} 

は、イベントのログと第3レベルを有する第二レベルのオブジェクト「L」があります」 p "にパラメータを設定すると、痛みが出ます。私はそれをデータフレームに変換しようとしていますが、テーブルに "100_SESSION_START"ログ値だけが必要です( "l"と "p"のすべてのパラメータ名は同じです)。上位レベルのオブジェクトイベント( 'u'、 'v'、 'dv'、 't' ...)からのパラメータ誰もそれをどのようにユーザーRを行うに任意のアイデアを持っていますか?

UPD:結果で、それはあなたがあなたがして、各イベントに繰り返すことができdata変数

data <- fromJSON("/home/joel/tmp/input.json") 

jsonファイルをロードしたと仮定すると、この click

+0

予想される出力の例を挙げることはできますか? – Psidom

+0

[Parse JSON with R]の重複可能性があります(http://stackoverflow.com/questions/2061897/parse-json-with-r) – theArun

+0

@Psidomが投稿を更新しました –

答えて

1

のようなテーブルがあると便利電子うと必要に応じてイベントの各ログに記入してください。

n<-length(data$sessionEvents$u) 
for (i in 1:n) { # Iterate over events 
    print(data$sessionEvents$u[i]) 
    print(data$sessionEvents$v[i]) 
    print(data$sessionEvents$dv[i]) 
    print(data$sessionEvents$t[i]) 
    m<-length(data$sessionEvents$l[i][[1]]$e) 
    for(j in 1:m){ # Iterate over logs 
    print(data$sessionEvents$l[i][[1]]$e[j]) 
    } 
} 

希望します。

+0

うん、あなたはそのような反復の例を挙げることができますか? :) –

+0

私はちょうどあなたが欲しいものを、代わりに値を印刷しました。 – joel314

+0

ありがとう、私はそれを試してみよう! –

0

lapplyを使用すると、次のようなことが起こります。

topLevel <- c("u", "v", "dv", "t") 
midLevel <- c("e", "o", "d") 
botLevel <- c("User_Timezone", "Session_nb", "Energy_Balance", "Global_Playtime") 

do.call(rbind, lapply(li[[1]], function(x) { 
    do.call(rbind, lapply(x$l, function(y) { 
     if(y$e == "100_SESSION_START") { 
      c(y[midLevel], y$p[botLevel], x[topLevel]) 
     } 
    })) 
})) 

    e     o d  User_Timezone Session_nb Energy_Balance Global_Playtime 
[1,] "100_SESSION_START" 24 147988 "-08:00"  "0"  "89"   "0"    
[2,] "100_SESSION_START" 169 5199 "-08:00"  "0"  "0"   "0"    
    u           v  dv    t   
[1,] "BC0F6A3A2840B6F48386BABC5F34B480BA4F9929" "0.1.0" "Unidentified" 1.462924e+12 
[2,] "C950FC733D883E11E36E15A705E05A3CC7748C3A" "0.1.0" "OPPO Mirror 5" 1.462909e+12 
+0

あなたの答えに感謝します!私はそれを実行しようとしましたが、エラー "y $ e:$演算子は原子ベクトルには無効です"があります。私はこのようなコマンドで値を簡単に得ることができます。doc $ sessionEvents $ l [i] [[1]] $ p $ User_Timezone [[1]] ' –

+0

文字通り、それはリストでなければならない 'y'を意味し、ここではベクトルです。実際のデータに 'l'要素が空の要素がいくつかある可能性があります。 – Psidom

+0

"fromJSON"を使ってファイルを読みましたか? –

関連する問題