【问题标题】:Make a dataframe from a json list从 json 列表中创建一个数据框
【发布时间】:2017-12-19 20:54:16
【问题描述】:

我想在 R 中的数据框中从 json 转换数据。我尝试使用包 data.tree 但我只得到一个只有 NA 的 data.frame ...

library(dplyr)
library(jsonlite)
library(data.tree)
library(magrittr)
data<-fromJSON("http://ec.europa.eu/eurostat/wdds/rest/data/v2.1/json/en/nama_gdp_c?precision=1&geo=EU28&unit=EUR_HAB&time=2010&time=2011&indic_na=B1GM")
repos<-as.Node(data)
repos %>% ToDataFrameTable(valeur=function(x) x$repos$value,annee= function(x) x$repos$dimension$time$category$label)

我也试过了

repos %>% ToDataFrameTable(valeur=function(x) x$value,annee= function(x) x$dimension$time$category$label)

但是这里只有两列数据是空的

我直接试了这个

as.data.frame(valeur=data$value,annee=data$dimension$time$category$label)

但我明白了: “as.data.frame 中的错误(valeur = data$value, annee = data$dimension$time$category$label):缺少参数“x”,没有默认值”

如果有人知道...

【问题讨论】:

  • 你想从那个 JSON 对象中提取什么信息?
  • 值和日期
  • AFAIK jsonlite 包的 fromJSON 参数正在寻找接受对象数组,并且从该 URL 返回的数据不是数组格式。

标签: json r


【解决方案1】:

这个怎么样?

library(rjson)
js <- fromJSON(file="http://ec.europa.eu/eurostat/wdds/rest/data/v2.1/json/en/nama_gdp_c?precision=1&geo=EU28&unit=EUR_HAB&time=2010&time=2011&indic_na=B1GM")

df <- data.frame(years=stack(js$dimension$time$category$label)$value, 
                 value=stack(js$value)$value, 
                 country=stack(js$dimension$geo$category$label)$value)
df

输出是:

  years value                       country
1  2010 24400 European Union (28 countries)
2  2011 25100 European Union (28 countries)

【讨论】:

  • 不完全是,更多的是:Annee Valeur 2010 24400 2011 25100 但也许这是不可能的,因为返回该 URL 的数据格式......我可能会添加一个处理方法。
  • 如果您可以解释所需的输出,那么我们可以想到确切的解决方案(意味着您希望如何将这些 JSON 数据保存在数据框中?)
  • 我想将此 JSON 保存在 data.frame 中,最好的可能是列中,("years","value","country"),分别在 $dimension$ time$category$index、$value 和 $dimension$geo$category$label
猜你喜欢
  • 1970-01-01
  • 2019-03-19
  • 2023-02-23
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多