【问题标题】:Nested List Parsing with jsonlite使用 jsonlite 进行嵌套列表解析
【发布时间】:2016-02-09 07:05:05
【问题描述】:

这是我最近第二次遇到这个问题,所以我想看看是否有更好的方法来解析从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

我真的不在乎是否在同一个数据框中解析这些列表,但是我有什么选项可以解析出数据?

我更愿意从列表中取出数据并将它们解析成一个数据框,该数据框可以与它来自的原始记录“相关”。

提前感谢您的帮助。

【问题讨论】:

  • 也许玩purrr::unnest 可能会得到你需要的东西?
  • 你是正确的。这正是我需要做的。 select(pbp, eventid, aoi) %&gt;% unnest() %&gt;% head。感谢您的提示,我不知道这个包/功能。
  • 我没有看到 unnest 发出咕噜声。也许你的意思是 pkg:tidyr?

标签: r jsonlite


【解决方案1】:

从上面的@hrbmstr 中,我能够使用unnest 得到我想要的。

select(pbp, eventid, aoi) %>% unnest() %>% head

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 2019-11-28
    • 1970-01-01
    • 2021-12-24
    • 2013-07-24
    • 2015-08-12
    • 1970-01-01
    相关资源
    最近更新 更多