我想将一个json文件中的单个对象导入R数据框。通常我使用jsonlite包中的fromJSON()
。但是现在我想将this json加载到数据框中,然后只加载名为的对象。
如果我使用:
library(jsonlite)
df <- fromJSON("http://live.nhl.com/GameData/20132014/2013020555/PlayByPlay.json")
它提供包含所有对象的数据框。有没有办法只加载数据框中的播放对象?或者我应该只加载完整的json并在R中重构它?
答案 0 :(得分:2)
这确实会返回一个数据帧,尽管它有点像列表和数据帧的错误。如果您使用其他包,它只是一个列表。使用str(df)(警告......长输出)
library(RJSONIO)
str(df)
#------------
List of 1
$ data:List of 2
..$ refreshInterval: num 0
..$ game :List of 7
.. ..$ awayteamid : num 24
.. ..$ awayteamname: chr "Anaheim Ducks"
.. ..$ hometeamname: chr "Washington Capitals"
.. ..$ plays :List of 1
.. .. ..$ play:List of 102
.. .. .. ..$ :List of 28
-----------Output truncated----------------
....显示plays
部分可以通过以下方式获得:
plays_out <- df$data$game$plays
我没有看到尝试自己解析这个问题有什么好处。大多数“数量”的数据都在播放组件中。
当我使用jsonlite :: fromJSON时,我得到一个略有不同的结构,这与我现在需要使用不同的调用来获取plays
项目完全不同:
> str(df )
'data.frame': 1 obs. of 2 variables:
$ refreshInterval:List of 1
..$ data: num 0
$ game :'data.frame': 1 obs. of 7 variables:
..$ awayteamid :List of 1
.. ..$ data: num 24
..$ awayteamname:List of 1
.. ..$ data: chr "Anaheim Ducks"
..$ hometeamname:List of 1
.. ..$ data: chr "Washington Capitals"
..$ plays :'data.frame': 1 obs. of 1 variable:
.. ..$ play:List of 1
.. .. ..$ data:'data.frame': 102 obs. of 29 variables:
.. .. .. ..$ aoi :List of 102
.. .. .. .. ..$ : num 8470612 8470621 8473933 8473972 8475151 ...
.. .. .. .. ..$ : num 8459442 8467332 8467400 8471476 8471699 ...
.. .. .. .. ..$ : num 8459442 8467332 8467400 8471476 8471699 ...
.. .. .. .. ..$ : num 8459442 8467332 8467400 8471476 8471699 ...
#------snipped output------------
> length(df$game$plays)
[1] 1
> length(df$game$plays$play)
[1] 1
> length(df$game$plays$play$data)
[1] 29
我认为我更喜欢RJSONIO :: fromJSON的结果,因为它不会增加数据帧强制的复杂性。