加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将XML解析为R

发布时间:2020-12-16 23:18:49 所属栏目:百科 来源:网络整理
导读:我想从 ECB website中提取汇率以转换我的本地货币数据.但是,我在使用xpath时遇到了很多困难(尽管 this对我帮助很大). library(XML)fileURL - "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?93aad09b8f8b7bdb69cd1574b5b2665f"download.fi
我想从 ECB website中提取汇率以转换我的本地货币数据.但是,我在使用xpath时遇到了很多困难(尽管 this对我帮助很大).

library(XML)

fileURL <- "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?93aad09b8f8b7bdb69cd1574b5b2665f"
download.file(fileURL,destfile=tf <- tempfile(fileext=".xml"))

xml_file <- xmlParse(tf)
xml_data <- xmlRoot(xml_file)

currency <- xml_data[["number(//Cube/@currency)"]]
rate <- xml_data[["number(//Cube/@rate)"]]

然后我只想创建简单的数据框:

df <- data.frame(currency,rate)

解决方法

1)xpathSApply以下行给出了带货币和费率列的字符矩阵:

m <- t(xpathSApply(xml_data,"//*[@rate]",xmlAttrs))

如果需要以带有字符和数字列的数据框的形式添加:

read.table(text = paste(m[,1],m[,2]),as.is = TRUE)

注意:我们避免在XPath表达式中使用*来处理命名空间,但是如果需要明确引用Cube,就像在问题中一样,那么它将如下所示:

m <- xpathSApply(xml_data,"//x:Cube[@rate]",xmlAttrs,namespaces = "x")

2)read.pattern另一种方法是使用gsubfn中的read.pattern解析XML文件. (这不使用XML包.)

library(gsubfn)
read.pattern(tf,pattern = "'(...)' rate='([0-9.]+)'",col.names = c("currency","rate"))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读