如何将复杂的XML解析为R中的长格式数据帧
我试图将XML解析为R数据帧如何将复杂的XML解析为R中的长格式数据帧,xml,r,xml-parsing,Xml,R,Xml Parsing,我试图将XML解析为R数据帧 xml.text <- '<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <recordGroup> <period>60</period> <record> <dateTime>01102015000000</dateTime> <field>
xml.text <-
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<recordGroup>
<period>60</period>
<record>
<dateTime>01102015000000</dateTime>
<field>
<id>Equipos.0CR02-1.AE</id>
<value>34.405000</value>
</field>
<field>
<id>Equipos.0CR02-1.API</id>
<value>160.794000</value>
</field>
</record>
<record>
<dateTime>01102015001500</dateTime>
<field>
<id>Equipos.0CR02-1.AE</id>
<value>38.309000</value>
</field>
<field>
<id>Equipos.0CR02-1.API</id>
<value>152.800000</value>
</field>
</record>
</recordGroup>'
library(XML)
xml <- xmlParse(xml.text)
indata <- xmlToDataFrame(getNodeSet(xml, "//recordGroup/record")[1])
由于dateTime适用于两种字段结构,因此需要获得一个长格式表结构,如下所示:
dateTime id value
1 01102015000000 Equipos.0CR02-1.AE 34.405000
2 01102015000000 Equipos.0CR02-1.API 160.794000
3 01102015001500 Equipos.0CR02-1.AE 38.309000
4 01102015001500 Equipos.0CR02-1.API 152.800000
...
您的xml有点混乱,但我们可以修复它:
library(XML)
xml <- xmlParse(xml.text)
xmlout <- do.call(rbind, xpathApply(xml,'//recordGroup/record', xmlToDataFrame))
谢谢它正在为一个记录集工作。但对于更多集合,xmlout只给出一个结果。我正在编辑我的问题以再添加一个记录集。
library(XML)
xml <- xmlParse(xml.text)
xmlout <- do.call(rbind, xpathApply(xml,'//recordGroup/record', xmlToDataFrame))
text id value
1 01102015000000 <NA> <NA>
2 <NA> Equipos.0CR02-1.AE 34.405000
3 <NA> Equipos.0CR02-1.API 160.794000
4 01102015001500 <NA> <NA>
5 <NA> Equipos.0CR02-1.AE 38.309000
6 <NA> Equipos.0CR02-1.API 152.800000
library(tidyr)
library(dplyr)
xmlout %>% fill(text) %>%
na.omit
text id value
2 01102015000000 Equipos.0CR02-1.AE 34.405000
3 01102015000000 Equipos.0CR02-1.API 160.794000
5 01102015001500 Equipos.0CR02-1.AE 38.309000
6 01102015001500 Equipos.0CR02-1.API 152.800000