从 xml 文件制作 data.frame 的问题
issue with making data.frame from xml file
我第一次尝试将 XML 转换为 R data.frame 并发现了诸如此类的问题:
How to transform XML data into a data.frame? 非常有帮助,但仍然无法将我的 XML 部分转换为 data.frame。
我的目标是绘制一段时间内欧元对美元的汇率图。数据在此处以 XML 格式列出:
http://www.ecb.europa.eu/stats/exchange/eurofxref/html/usd.xml
我能够读取数据并显示我感兴趣的数据部分(节点?):
library(XML)
doc <- xmlTreeParse("http://www.ecb.europa.eu/stats/exchange/eurofxref/html/usd.xml")
root <- xmlRoot(doc)
root[[2]][[2]]
我已尝试使用 getNodeSet() 的变体来显示所有以 开头的行,但到目前为止无济于事:
getNodeSet(root, "/DataSet/Series/*")
getNodeSet(root, "//obs")
getNodeSet(root, "//obs[@OBS_VALUE = 1.1789]")
我如何从这个 XML 文件中提取所有或变量 TIME_PERIOD 和 OBS_VALUE 并将它们放入 R data.frame 中?已经感谢您的任何意见或说明。
此数据为 sdmx 格式。可以使用R包rsdmx
解析数据:
library(rsdmx)
appData <- readSDMX("http://www.ecb.europa.eu/stats/exchange/eurofxref/html/usd.xml")
myData <- as.data.frame(appData)
> head(myData)
FREQ CURRENCY CURRENCY_DENOM EXR_TYPE EXR_SUFFIX TIME_FORMAT COLLECTION TIME_PERIOD OBS_VALUE OBS_STATUS OBS_CONF
1 D USD EUR SP00 A P1D A 1999-01-04 1.1789 A F
2 D USD EUR SP00 A P1D A 1999-01-05 1.1790 A F
3 D USD EUR SP00 A P1D A 1999-01-06 1.1743 A F
4 D USD EUR SP00 A P1D A 1999-01-07 1.1632 A F
5 D USD EUR SP00 A P1D A 1999-01-08 1.1659 A F
6 D USD EUR SP00 A P1D A 1999-01-11 1.1569 A F
或者,如果您手边只有 XML 包裹:
doc <- xmlParse("http://www.ecb.europa.eu/stats/exchange/eurofxref/html/usd.xml")
docData <- getNodeSet(doc, "//ns:Obs"
, namespaces = c(ns = "http://www.ecb.europa.eu/vocabulary/stats/exr/1")
, fun = xmlAttrs)
docData <- do.call(rbind, docData)
> head(docData)
TIME_PERIOD OBS_VALUE OBS_STATUS OBS_CONF
[1,] "1999-01-04" "1.1789" "A" "F"
[2,] "1999-01-05" "1.1790" "A" "F"
[3,] "1999-01-06" "1.1743" "A" "F"
[4,] "1999-01-07" "1.1632" "A" "F"
[5,] "1999-01-08" "1.1659" "A" "F"
[6,] "1999-01-11" "1.1569" "A" "F"
我第一次尝试将 XML 转换为 R data.frame 并发现了诸如此类的问题: How to transform XML data into a data.frame? 非常有帮助,但仍然无法将我的 XML 部分转换为 data.frame。
我的目标是绘制一段时间内欧元对美元的汇率图。数据在此处以 XML 格式列出:
http://www.ecb.europa.eu/stats/exchange/eurofxref/html/usd.xml
我能够读取数据并显示我感兴趣的数据部分(节点?):
library(XML)
doc <- xmlTreeParse("http://www.ecb.europa.eu/stats/exchange/eurofxref/html/usd.xml")
root <- xmlRoot(doc)
root[[2]][[2]]
我已尝试使用 getNodeSet() 的变体来显示所有以 开头的行,但到目前为止无济于事:
getNodeSet(root, "/DataSet/Series/*")
getNodeSet(root, "//obs")
getNodeSet(root, "//obs[@OBS_VALUE = 1.1789]")
我如何从这个 XML 文件中提取所有或变量 TIME_PERIOD 和 OBS_VALUE 并将它们放入 R data.frame 中?已经感谢您的任何意见或说明。
此数据为 sdmx 格式。可以使用R包rsdmx
解析数据:
library(rsdmx)
appData <- readSDMX("http://www.ecb.europa.eu/stats/exchange/eurofxref/html/usd.xml")
myData <- as.data.frame(appData)
> head(myData)
FREQ CURRENCY CURRENCY_DENOM EXR_TYPE EXR_SUFFIX TIME_FORMAT COLLECTION TIME_PERIOD OBS_VALUE OBS_STATUS OBS_CONF
1 D USD EUR SP00 A P1D A 1999-01-04 1.1789 A F
2 D USD EUR SP00 A P1D A 1999-01-05 1.1790 A F
3 D USD EUR SP00 A P1D A 1999-01-06 1.1743 A F
4 D USD EUR SP00 A P1D A 1999-01-07 1.1632 A F
5 D USD EUR SP00 A P1D A 1999-01-08 1.1659 A F
6 D USD EUR SP00 A P1D A 1999-01-11 1.1569 A F
或者,如果您手边只有 XML 包裹:
doc <- xmlParse("http://www.ecb.europa.eu/stats/exchange/eurofxref/html/usd.xml")
docData <- getNodeSet(doc, "//ns:Obs"
, namespaces = c(ns = "http://www.ecb.europa.eu/vocabulary/stats/exr/1")
, fun = xmlAttrs)
docData <- do.call(rbind, docData)
> head(docData)
TIME_PERIOD OBS_VALUE OBS_STATUS OBS_CONF
[1,] "1999-01-04" "1.1789" "A" "F"
[2,] "1999-01-05" "1.1790" "A" "F"
[3,] "1999-01-06" "1.1743" "A" "F"
[4,] "1999-01-07" "1.1632" "A" "F"
[5,] "1999-01-08" "1.1659" "A" "F"
[6,] "1999-01-11" "1.1569" "A" "F"