[英]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
,即。 相當於以下..?
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表,但是由於所有元素都共享相同的簡單內部格式,因此我們應該能夠像對待表一樣對待它們。
使用已經具有這種簡單結構的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文件轉換速度很慢,則此博客文章描述了github上托管的一種更快的函數,您可以嘗試: require(devtools); install_github("processVISION", "muschellij2")
require(devtools); install_github("processVISION", "muschellij2")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.