Как удалить нестандартные данные JSON - PullRequest
0 голосов
/ 03 марта 2019

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

У меня есть набор данных на 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", который содержит данные, которые я быкак в разбивке на 2-мерный кадр данных

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

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

данные в "проигрывателях".столбцы 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 раунда

окончательный формат двумерного информационного кадра, который мне нужен, будет иметь столбцы с названием Players.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 ряда.

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

1 Ответ

0 голосов
/ 03 марта 2019

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

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

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

...