将嵌套的JSON解析为R中的数据框架

Abr*_*das 7 json r

我遇到了一个非常讨厌的嵌套JSON的问题.

格式是这样的

{
  "matches": [
    {
      "matchId": 1,
      "region": "BR",
      "participants": [
        {
          "participantId": 0,
          "teamId": 200,
         "stats": {
            "winner": true,
            "champLevel": 16,
            "item0": 3128,
             }
         {
      "matchId": 2,
      "region": "BR",
      "participants": [
        {
          "participantId": 0,
          "teamId": 201,
         "stats": {
            "winner": false,
            "champLevel": 18,
            "item0": 3128,
            "item1": 3157,
            "item1": 3158,
             }
Run Code Online (Sandbox Code Playgroud)

正如您在第二场比赛中看到的那样,项目数量增加了,但在数据框架中第一行将具有相同的列:

MatchId  region ... stats.winner stats.champLevel stats.item0 stats.item1 stats.item2  
1         BR          TRUE         16                 3128          1       BR
1         BR          TRUE         16                 3128          3157     3158
Run Code Online (Sandbox Code Playgroud)

看第一行小于第二行,所以R回收值....

如果您想要完整的数据,可以访问:http: //pastebin.com/HQDf2ase

我如何将json解析为data.frame:

json.matchData <- fromJSON(file="file.json"))
Run Code Online (Sandbox Code Playgroud)

取消列出Json的元素并将其转换为数据框

matchData.i <- lapply(json.matchData$matches, function(x){ unlist(x)})
Run Code Online (Sandbox Code Playgroud)

转换为数据框架

matchData <- do.call("rbind", matchData.i)
matchData <- as.data.frame(matchData)
Run Code Online (Sandbox Code Playgroud)

但是数据帧搞砸了,因为有些字段应该是NA但是它们填充了错误的值.

MrF*_*ick 5

我认为在plyr rbind.fill()这里使用该功能会有所帮助。这个怎么样

library(plyr)
matchData <- rbind.fill(lapply(matchData.i, 
    function(x) do.call("data.frame", as.list(x))
))
Run Code Online (Sandbox Code Playgroud)

lapply()位是把中间列表分成data.frames其中rbind.fill需要。