如何取消嵌套不规则的 JSON 数据

Posted

技术标签:

【中文标题】如何取消嵌套不规则的 JSON 数据【英文标题】:How to unnest irregular JSON data 【发布时间】: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 行。

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于如何取消嵌套不规则的 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用python取消嵌套json格式的数据

访问规则中的嵌套配置变量

取消嵌套嵌套 json 数据以显示在 Quicksight 中

如何在 Presto 中交叉加入取消嵌套 JSON 数组

嵌套可观察订阅问题,无法取消订阅

如何在redshift上取消嵌套json字符串数组[重复]