R - json网页到数据框

时间:2017-01-28 16:40:14

标签: json r

我希望将此网页中的数据http://live.nhl.com/GameData/20162017/2016020725/PlayByPlay.json放入可用的R数据框中。

到目前为止,我已经尝试过使用:

library(jsonlite)
json <- "http://live.nhl.com/GameData/20162017/2016020725/PlayByPlay.json"
doc <- fromJSON(json, simplifyDataFrame = TRUE)

这会将文件放入list of 1并且说实话,使用R中的列表还不是我的技能(对数据框更熟悉)。

我希望能够将该网页划分为可用的数据框。

我已经尝试了

PBP <- rbindlist(lapply(doc, as.data.table), fill = TRUE)

但这没效果。

有什么想法吗?很高兴在需要时提供更多信息。

1 个答案:

答案 0 :(得分:3)

也许第一个行动方案是理解列表中的列表。你所拥有的是一个长度为1的列表。如果你names(doc),你会注意到这个列表元素被命名为data。要完全显示对象的结构,请尝试str(doc)。这是很多输出!以下是一些第一行,让您了解正在发生的事情。

可以使用[[$来处理列表。另请[,但请参阅this tweet了解详情。您可以doc$datadoc[[1]]doc[["data]]访问第一个元素。所有这些都是等价的,但有些任务可能更方便。要“爬”下来列表树,只需添加额外的参数。请注意,您可以混合所有这些。请参阅内联代码以进行预览。从你的问题来看,目前尚不清楚你所追求的json文件的哪一部分。尝试扩展问题,甚至更好,修改doc

doc:
data # doc[[1]] or doc[["data"]] pr doc$data
 |___ refreshInterval # doc[[1]][[1]] or doc[[1]][["refreshinterval"]] or doc[["data"]][["refreshinterval]] or doc$data$refreshinterval
 |___ game # doc[[1]][[2]] or doc[[1]][["game"]] or you go the idea
        |___ awayteamid # doc$data$refreshinterval
        |___ awayteamname
        |___ hometeamname
        |___ plays
        |___ awayteamnick
        |___ hometeamnick
        |___ hometeamid

您可以通过

访问游戏统计信息
xy <- doc$data$game$plays$play
xy[1:6, c("desc", "type", "p2name", "teamid", "ycoord", "xcoord")]

                                               desc type           p2name teamid ycoord xcoord
1                     Radko Gudas hit Chris Kreider  Hit    Chris Kreider      4    -12    -96
2  Pavel Buchnevich Wrist Shot saved by Steve Mason Shot      Steve Mason      3     26    -42
3                 Brandon Pirri hit Brandon Manning  Hit  Brandon Manning      3     42    -68
4                  Nick Cousins hit Adam Clendening  Hit  Adam Clendening      4     35     92
5 Nick Cousins Wrist Shot saved by Henrik Lundqvist Shot Henrik Lundqvist      4     19     86
6   Michael Grabner Wrist Shot saved by Steve Mason Shot      Steve Mason      3      5    -63