我在将 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 包/进程。提前致谢。
该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()。
这个 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 存储不规则数据结构的最佳方式。
除非您可以定义一种将不规则数据映射到矩形数据框中的方法,否则无法将其存储在数据框中。你了解数据的结构吗?这是至关重要的。