将 xml/html 文档中的元素强制转换为 data.frame
Coerce elements in xml/html document to data.frame
假设您在 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 table,但由于所有元素共享相同的简单内部格式,我们应该能够像 table..[=15 一样对待它们=]
使用 xml 已经是这样的简单结构,可以使用 XML 包中的 xmlToDataFrame()
轻松转换,如下所示:
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")
假设您在 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 table,但由于所有元素共享相同的简单内部格式,我们应该能够像 table..[=15 一样对待它们=]
使用 xml 已经是这样的简单结构,可以使用 XML 包中的 xmlToDataFrame()
轻松转换,如下所示:
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")