数周以来,我一直在这个站点上寻找许多类似问题的解决方案,但是我无法确定如何将其成功应用于这一特定问题:
我的数据集位于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
列中有另一个嵌套的列表...我在其中重复ldply以使所有内容嵌套,但我无法以这种方式将其逻辑地缝在一起要...
$rounds
列的格式,取消嵌套后,使用:
player_stats_df3<- ldply(player_stats_df2$rounds, data.frame)
在第一列$r
中给出轮号(仅选择1,2,3,4),然后在第二列$rValue
中给出统计值。使事情复杂化的是,有些条目有2个回合,而其他条目有4个回合
我需要的二维数据帧的最终格式将有来自player_stats_df的名为players.pid和players.pn的列,这是一个新列,表示“ round.no”,它对应于player_stats_df3$r
,然后每个player_stats_df2$name
中25个重复的统计类别,分别作为一列(老鹰,小鸟,标准杆... SG:开球,SG:开球至果岭,SG:总计),每一行对于玩家姓名和回合号码...
例如,马特·库查尔(Matt Kuchar)会有四行,每局比赛一排,而25个统计类别中的每一列都有一列...但是,其他一些球员只有两行。
请让我知道是否可以针对这个特定示例进行澄清-我已经尝试了很多事情,但是无法以我需要在...中使用的格式将这些数据缝在一起。
答案 0 :(得分:0)
您可以从这里开始,我们可以使用tibble
创建一个tibble::as_tibble
,然后使用tidyr::unnest
来应用多个嵌套
library(tidyverse)
as_tibble(player_stats_json$tournament$players) %>% unnest() %>% unnest(rounds)
另请参阅本教程here。最后使用dplyr
“ tidyverse
”代替plyr