在R中读取SDMX - 解析错误?

时间:2015-02-21 05:52:39

标签: r xml parsing sdmx

我一直在努力通过他们最近发起的SDMX服务在IN中利用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”的问题,如果是这样,是否有人找到了正确解析类似结构的方法?

2 个答案:

答案 0 :(得分: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邮件列表中发送建议或希望的功能。

答案 1 :(得分:0)

您可以尝试RJSDMX

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

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

或等效地:

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

如果你需要时间序列,你就完成了。 Elseway,如果你喜欢data.frame,你可以调用它:

dfresult = sdmxdf(result, meta=T)

您可以在项目wiki

中找到有关该软件包及其配置的更多信息