2016-02-06 5 views
1

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

Я знаю, что эта часть власти с jsonlite, но я не уверен, как работать с этой вложенной структурой. В конце концов, я полагаю, что я могу написать собственный собственный синтаксический анализ, но, учитывая, что я почти там, мне хотелось посмотреть, как работать с этими данными.

Например:

## options 
options(stringsAsFactors=F) 

## packages 
library(httr) 
library(jsonlite) 

## setup 
gameid="2015020759" 
SEASON = '20152016' 
BASE = "http://live.nhl.com/GameData/" 
URL = paste0(BASE, SEASON, "/", gameid, "/PlayByPlay.json") 

## get the data 
x <- GET(URL) 

## parse 
api_response <- content(x, as="text") 
api_response <- jsonlite::fromJSON(api_response, flatten=TRUE) 

## get the data of interest 
pbp <- api_response$data$game$plays$play 
colnames(pbp) 

И исследовать то, что возвращается:

> class(pbp$aoi) 
[1] "list" 
> class(pbp$desc) 
[1] "character" 
> class(pbp$xcoord) 
[1] "integer" 

Сверху колонна pbp$aoi список. Вот несколько записей:

> head(pbp$aoi) 
[[1]] 
[1] 8465009 8470638 8471695 8473419 8475792 8475902 

[[2]] 
[1] 8470626 8471276 8471695 8476525 8476792 8477956 

[[3]] 
[1] 8469619 8471695 8473492 8474625 8475727 8476525 

[[4]] 
[1] 8469619 8471695 8473492 8474625 8475727 8476525 

[[5]] 
[1] 8469619 8471695 8473492 8474625 8475727 8476525 

[[6]] 
[1] 8469619 8471695 8473492 8474625 8475727 8475902 

Я действительно не волнует, если я анализирую эти списки в том же dataframe, но что я для вариантов разобрать данные?

Я бы предпочел извлечь данные из списков и проанализировать их в виде данных, которые могут быть «связаны» с исходной записью, из которой она была получена.

Заранее за вашу помощь.

+1

Возможно, вы играете с 'purrr :: unsest', можете ли вы получить то, что вам нужно? – hrbrmstr

+1

Вы были на месте. Это зависит от того, что мне нужно делать. 'select (pbp, eventid, aoi)%>% unsest()%>% head'. Спасибо за отзыв, я не знал об этом пакете/функции. – Btibert3

+2

Я не вижу 'disest' в purrr. Возможно, вы имели в виду pkg: tidyr? –

ответ

2

Из @hrbmstr выше, я смог получить то, что хотел, используя unnest.

select(pbp, eventid, aoi) %>% unnest() %>% head 
Смежные вопросы