2

我一直在尝试通过他们最近启动的 SDMX 服务在 R 中使用 INEGI(墨西哥统计局)数据开发一个闪亮的应用程序。我甚至联系了开发人员自己,他们给了我以下不可行的代码:

require(devtools) 
require(RSQLite)
require(rsdmx)
require(RCurl)

url <- paste("http://www.snieg.mx/opendata/NSIRestService/Data/ALL,DF_PIB_PB2008,ALL/ALL/INEGI");
sdmxObj <- readSDMX(url)

df_pib <- as.data.frame(sdmxObj)

这给我带来了以下错误:

sdmxObj <- readSDMX(url)
 Opening and ending tag mismatch: ad line 1 and Name
 Opening and ending tag mismatch: b3 line 1 and Name
 Opening and ending tag mismatch: b3 line 1 and Department
 Opening and ending tag mismatch: c3 line 1 and Contact
 Opening and ending tag mismatch: a1 line 1 and Sender
 Opening and ending tag mismatch: c3 line 1 and Header
 Opening and ending tag mismatch: b3 line 1 and GenericData

...等等,你明白了。

我尝试使用另一个网址(也许这太宽泛了,引入了每个 GDP 测量值),但我得到了相同的结果:

url<-"http://www.snieg.mx/opendata/NSIRestService/Data/ALL,DF_PIB_PB2008,ALL/.MX.........C05.......0101/INEGI?format=compact"

如果我直接用浏览器下载文件,我似乎得到了有用的结构。

有任何想法吗?这看起来像是直接来自源的错误定义还是包“rsdmx”的问题,如果是这样,有没有人找到正确解析类似结构的方法?

4

2 回答 2

2

您在上面粘贴的代码使用rsdmx可以正常工作。正如您正确理解的那样,您遇到的问题是关于您的工作场所防火墙。

您只需要加载rsdmx包(其他包不需要显式声明)

require(rsdmx)

并执行此代码:

url <- paste("http://www.snieg.mx/opendata/NSIRestService/Data/ALL,DF_PIB_PB2008,ALL/ALL/INEGI");
sdmxObj <- readSDMX(url)
df_pib <- as.data.frame(sdmxObj)

我已经检查了与此数据源相关的任何潜在问题,但没有。严格保持在您的帖子范围内,您的代码很好。

话虽这么说,如果您发现 rsdmx 中的错误,您可以直接在https://github.com/opensdmx/rsdmx/issues提交工单,提示反馈给用户。您还可以在那里或 rsdmx 邮件列表中发送建议或希望的功能。

于 2015-03-17T16:42:16.373 回答
0

你可以试试RJSDMX

要下载DF_PIB_PB2008数据流的所有时间序列,您只需点击:

library(RJSDMX)
result = getSDMX('INEGI', 'DF_PIB_PB2008/.................')

或等效地:

result = getSDMX('INEGI', 'DF_PIB_PB2008/ALL')

如果您因此需要时间序列,那么您就完成了。否则,如果您更喜欢 data.frame,您可以调用它:

dfresult = sdmxdf(result, meta=T)

您可以在项目wiki中找到有关包及其配置的更多信息

于 2015-02-23T09:39:14.717 回答