如何取消嵌套不规则的 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。最后用dplyr
“tidyverse
”代替plyr
【讨论】:
以上是关于如何取消嵌套不规则的 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章