假设您在R中有一个文档,格式如下:
<grp>
<elementx>
<sub_a>a</sub_a>
<sub_b>b</sub_b>
<sub_c>c</sub_c>
</elementx>
<elementx>
<sub_a>1</sub_a>
<sub_b>2</sub_b>
<sub_c>3</sub_c>
</elementx>
</grp>
将这些强制转换为data.frame
的最优雅方式是什么,即。相当于以下..?
data.frame(sub_a = c('a',1), sub_b = c('b',2), sub_c = c('c',3))
sub_a sub_b sub_c
1 a b c
2 1 2 3
它不是一个html表,但由于所有元素共享相同的简单内部格式,我们应该能够像表格一样对待它们。
答案 0 :(得分:2)
如果xml已经是一个简单的结构,可以使用xmlToDataFrame()
从XML包轻松转换,如下所示:
library(XML)
xmlstr <-
"<grp>
<elementx>
<sub_a>a</sub_a>
<sub_b>b</sub_b>
<sub_c>c</sub_c>
</elementx>
<elementx>
<sub_a>1</sub_a>
<sub_b>2</sub_b>
<sub_c>3</sub_c>
</elementx>
</grp>"
df <- xmlToDataFrame(xmlstr)
df
# sub_a sub_b sub_c
#1 a b c
#2 1 2 3
如果xml在文件中而不是字符串中,那么您可以使用它:
xmlstr <- readLines("test.xml")
df <- xmlToDataFrame(xmlstr)
如果你想直接从一个http地址获取你的xml,(就像在你的问题的评论中那样),那么这个工作
doc = readLines('https://www.gov.uk/government/announcements.atom?announcement_filter_option=statements&topics%5B%5D=transport')
df2 <- xmlToDataFrame(doc)
如果您正在处理转换速度很慢的非常大的xml文件,this blog post描述了您可以尝试在github上托管的更快的函数:require(devtools); install_github("processVISION", "muschellij2")