将 JSON URL 转换为 R 数据帧

Fra*_* B. 4 json r dataframe

我在将 JSON 文件(从 API)转换为 R 中的数据框时遇到问题。一个例子是 URL http://api.fantasy.nfl.com/v1/players/stats?statType=seasonStats&season=2010&week= 1&格式=json

我尝试了 S/O 的一些不同建议,包括 将 json 数据转换为 R 中的数据框和各种博客文章,例如http://zevross.com/blog/2015/02/12/using-r-to- download-and-parse-json-an-example-using-data-from-an-open-data-portal/

我最接近的是使用下面的代码,它为我提供了一个包含 4 个“行”和一堆“变量”(V1、V2 等)的大矩阵。我假设这个 JSON 文件的格式与“普通”文件的格式不同。

library(RJSONIO)

raw_data <- getURL("http://api.fantasy.nfl.com/v1/players/stats?statType=seasonStats&season=2010&week=1&format=json")

data <- fromJSON(raw_data)

final_data <- do.call(rbind, data)
Run Code Online (Sandbox Code Playgroud)

我不知道如何让它工作,所以欢迎任何 R 包/进程。提前致谢。

Jer*_*oen 6

jsonlite包会自动获取数据帧:

library(jsonlite)
mydata <- fromJSON("http://api.fantasy.nfl.com/v1/players/stats?statType=seasonStats&season=2010&week=1&format=json")

names(mydata$players)
# [1] "id"                 "esbid"              "gsisPlayerId"       "name"              
# [5] "position"           "teamAbbr"           "stats"              "seasonPts"         
# [9] "seasonProjectedPts" "weekPts"            "weekProjectedPts" 

head(mydata$players)
#        id     esbid gsisPlayerId                name position teamAbbr stats.1
# 1  100029     FALSE        FALSE San Francisco 49ers      DEF       SF      16
# 2     729 ABD660476   00-0025940     Husain Abdullah       DB       KC      15
# 3 2504171 ABR073003   00-0019546        John Abraham       LB               15
# 4 2507266 ADA509576   00-0025668       Michael Adams       DB               13
# 5 2505708 ADA515576   00-0022247          Mike Adams       DB      IND      15
# 6 1037889 ADA534252   00-0027610       Phillip Adams       DB      ATL      11
Run Code Online (Sandbox Code Playgroud)

您可以使用此控制simplify中的参数jsonlite::fromJSON()


Spa*_*man 3

这个 JSON 没有什么“异常”,它只是不是一个适合数据框架的矩形结构。JSON 可以表示更丰富的数据结构。

例如(使用rjson包,你还没说你用了什么):

> data = rjson::fromJSON(file="http://api.fantasy.nfl.com/v1/players/stats?statType=seasonStats&season=2010&week=1&format=json")
> length(data[[4]][[10]]$stats)
[1] 14
> length(data[[4]][[1]]$stats)
[1] 21
Run Code Online (Sandbox Code Playgroud)

data[[1 to 3]]看起来像标题)

第 10 个元素的“统计信息”data[[4]]有 14 个元素,第一个元素的“统计信息”有 21 个元素。这将如何适应矩形数据框?R 将其存储在列表中,因为这是 R 存储不规则数据结构的最佳方式。

除非您可以定义一种将不规则数据映射到矩形数据框中的方法,否则无法将其存储在数据框中。你了解数据的结构吗?这是至关重要的。