我希望将此网页中的数据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)
但这没效果。
有什么想法吗?很高兴在需要时提供更多信息。
答案 0 :(得分:3)
也许第一个行动方案是理解列表中的列表。你所拥有的是一个长度为1的列表。如果你names(doc)
,你会注意到这个列表元素被命名为data
。要完全显示对象的结构,请尝试str(doc)
。这是很多输出!以下是一些第一行,让您了解正在发生的事情。
可以使用[[
和$
来处理列表。另请[
,但请参阅this tweet了解详情。您可以doc$data
,doc[[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