Как отключить нестандартные данные JSON

Я неделями искал на этом сайте множество решений аналогичных проблем, но не могу понять, как успешно применить их к этой конкретной проблеме:

У меня есть набор данных по адресу 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 столбцов, седьмой из которых называется "player.stats" и содержит данные, которые я хотел бы разбить на двухмерный фрейм данных.

Далее я сделаю это, чтобы поближе взглянуть на столбец "player.stats":

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

данные в столбцах "player.stats" отформатированы следующим образом: строки из 25 повторяющихся категорий статистики в столбце (player_stats_df2$name) и еще один вложенный список в столбце $rounds ... в котором я повторяю ldply, чтобы разложить все, но я не могу шить это логически объединить так, как я хочу ...

формат столбца $rounds после невложенного, используя:

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

дает круглое число в первом столбце $r (1,2,3,4 как только варианты выбора), а затем значение статистики во втором столбце $rValue. чтобы усложнить ситуацию, некоторые записи имеют 2 раунда, а другие - 4 раунда

окончательный формат 2-мерного фрейма данных, который мне нужен, будет иметь столбцы с именами player.pid и Players.pn из player_stats_df, НОВАЯ КОЛОНКА, обозначающая «round.no», которая будет соответствовать player_stats_df3$r, а затем каждой из 25 повторяющихся категорий характеристик из player_stats_df2$name в виде столбца (орлы, птички, парсы ... SG: Off-the-tee, SG: tee-to-green, SG: Total), причем каждая строка уникальна для имени игрока и номера раунда ...

Например, для Мэтта Кучара было бы четыре строки, по одной на каждый сыгранный раунд, и столбец для каждой из 25 категорий характеристик ... Однако у некоторых других игроков было бы только 2 строки.

Пожалуйста, дайте мне знать, могу ли я вообще прояснить это для этого конкретного примера - я пробовал много вещей, но не могу сшить эти данные обратно вместе в формате, который мне нужно использовать в ...


person Sean O'Donnell    schedule 03.03.2019    source источник


Ответы (1)


Здесь то, с чего вы можете начать, мы можем создать tibble, используя tibble::as_tibble, а затем применить несколько unnest, используя tidyr::unnest

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

Также см. Это руководство здесь. Наконец, используйте dplyr "tidyverse" вместо plyr

person A. Suliman    schedule 03.03.2019