【问题标题】:How to unnest irregular JSON data如何取消嵌套不规则的 JSON 数据
【发布时间】:2019-03-03 05:47:20
【问题描述】:

数周以来,我一直在这个网站上寻找许多类似问题的解决方案,但无法弄清楚如何将它们成功地应用于这个特定的问题:

我的数据集位于https://statdata.pgatour.com/r/006/player_stats.json

使用:

player_stats_url<-"https://statdata.pgatour.com/r/006/player_stats.json"
player_stats_json <- fromJSON(player_stats_url)
player_stats_df <- ldply(player_stats_json,data.frame)

给出: 一个 145 行的数据框,每个玩家一个,7 列,其中第 7 列名为“players.stats”,其中包含我想要分解为二维数据框的数据

接下来,我这样做是为了仔细查看“players.stats”列:

player_stats_df2<- ldply(player_stats_df$players.stats, data.frame)

“players.stats”列中的数据格式如下: 列 (player_stats_df2$name) 中有 25 个重复的统计类别,$rounds 列中有另一个嵌套列表...

$rounds的格式,取消嵌套后,使用:

    player_stats_df3<- ldply(player_stats_df2$rounds, data.frame)

在第一列$r 中给出整数(1,2,3,4 作为唯一选项),然后在第二列$rValue 中给出统计值。更复杂的是,有些条目有 2 轮,而另一些有 4 轮

我需要的二维数据帧的最终格式将有来自 player_stats_df 的名为 player.pid 和 player.pn 的列,表示“round.no”的新列,对应于player_stats_df3$r,然后是 25 个中的每一个重复来自player_stats_df2$name 的统计类别作为一列(老鹰、小鸟、帕...数...

例如,Matt Kuchar 将有 4 行,每轮比赛有 1 行,25 个统计类别中的每一个都有一列......但是,其他一些玩家只有 2 行。

如果我可以为这个特定示例澄清这一点,请告诉我 - 我已经尝试了很多方法,但无法以我需要在其中使用它的格式将这些数据重新组合在一起......

【问题讨论】:

    标签: r json unnest


    【解决方案1】:

    您可以从这里开始,我们可以使用tibble::as_tibble 创建一个tibble,然后使用tidyr::unnest 应用多个unnest

    library(tidyverse)
    as_tibble(player_stats_json$tournament$players) %>% unnest() %>% unnest(rounds)
    

    另请参阅本教程here。最后用dplyrtidyverse”代替plyr

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2021-12-10
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多