【问题标题】:Dealing with nested lists from an api using jsonlite in R在 R 中使用 jsonlite 处理来自 api 的嵌套列表
【发布时间】:2019-08-28 19:47:52
【问题描述】:

我使用 fromJSON() 将数据从 api 拉入 R,然后使用 jsonlite 中的 flatten()。为什么有些列仍然是嵌套列表?

teamstats <- fromJSON(getURL("https://statsapi.web.nhl.com/api/v1/teams?expand=team.stats"))

teamstatsflat <- flatten(teamstats$teams)

str(teamstatsflat)

查看结构显示 $splits 仍被视为一个列表,并且没有被取消嵌套,但所有其他列表都已取消嵌套。我对 R 很陌生,所以这可能是一个愚蠢的问题,但我们将不胜感激。

【问题讨论】:

  • flatten 只允许您展平一级数据,您可以使用flatten(flatten(x)) 进一步展平列表。但我想你可能想要的是?unlist 而不是flatten
  • 您提供的网址返回 404 错误,所以我忍不住给出一个工作示例
  • 我已更新网址。我尝试使用 flatten(flatten(x)),但这不起作用。我将研究 unlist 函数。谢谢。
  • 在你的情况下,做flatten(flatten(teamstats)),它应该会给你一些回报。那是你要的吗?您期望的输出格式是什么?
  • flatten(flatten(teamstats)) 返回 Error in flatten(teamstats) : is.data.frame(x) is not TRUE 。我希望创建一个新的数据框,该数据框将基础数据中的所有变量放在单独的列中。

标签: r


【解决方案1】:

我看了一下资料,其实不用flatten可以提取大部分信息,试试:

teamstats <- fromJSON("https://statsapi.web.nhl.com/api/v1/teams?expand=team.stats")

team <- teamstats[["teams"]]

team

如果您确实需要teamStatssplits 列表)中的信息并将它们放入数据框中,您可以使用以下代码。该方法需要purrr包来遍历列表中的所有元素:

library(purrr)
teamstats <- fromJSON("https://statsapi.web.nhl.com/api/v1/teams?expand=team.stats")
team2 <- teamstats[["teams"]]$teamStats
final <- map_df(team2,~as.data.frame(t(unlist(.x[["splits"]]))))
# you can ignore the warning information here

final

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    相关资源
    最近更新 更多