R中的XML解析和数据帧转换
问题描述:
我有一个XML文件,我在R中解析并且必须读取它并将其转换为随后可以由行ID排列的数据帧。此XML文件R中的XML解析和数据帧转换
<tags>
<row Id="1" TagName="bayesian" Count="1342" ExcerptPostId="20258" WikiPostId="20257"/>
<row Id="2" TagName="prior" Count="168" ExcerptPostId="62158" WikiPostId="62157"/>
<row Id="3" TagName="elicitation" Count="6"/>
<row Id="4" TagName="normality" Count="191" ExcerptPostId="67815" WikiPostId="67814"/>
<row Id="5" TagName="open-source" Count="13"/>
</tags>
我尝试使用XMLparse
Tags_data <- xmlParse("../Tags.xml",useInternalNodes = True)
xml_Data <- xmlToList(Tags_data)
ldply(xml_Data,data.frame)
不知怎的,它给我的错误,行不被转换成data.frame。
答
逻辑值TRUE
在R
中应始终全部大写。此外,为了输出每观察一排一个data.frame,你应该在ldply
使用rbind
而不是data.frame
:
library(XML)
library(plyr)
xml <- '<tags> <row Id="1" TagName="bayesian" Count="1342" ExcerptPostId="20258" WikiPostId="20257"/>
<row Id="2" TagName="prior" Count="168" ExcerptPostId="62158" WikiPostId="62157"/>
<row Id="3" TagName="elicitation" Count="6"/>
<row Id="4" TagName="normality" Count="191" ExcerptPostId="67815" WikiPostId="67814"/>
<row Id="5" TagName="open-source" Count="13"/>
</tags>'
Tags_data <- xmlParse(xml,useInternalNodes = TRUE)
xml_Data <- xmlToList(Tags_data)
ldply(xml_Data,rbind)
.id Id TagName Count ExcerptPostId WikiPostId
1 row 1 bayesian 1342 20258 20257
2 row 2 prior 168 62158 62157
3 row 3 elicitation 6 <NA> <NA>
4 row 4 normality 191 67815 67814
5 row 5 open-source 13 <NA> <NA>
答
你也可以排节点
doc <- xmlParse(xml)
XML:::xmlAttrsToDataFrame(doc["//row"])
Id TagName Count ExcerptPostId WikiPostId
1 1 bayesian 1342 20258 20257
2 2 prior 168 62158 62157
3 3 elicitation 6 <NA> <NA>
4 4 normality 191 67815 67814
5 5 open-source 13 <NA> <NA>
的错误上使用
xmlAttrsToDataFrame
我得到的是“Error in xmlParse(xml,useInternalNodes = True): object'True'not found”。真应该是“真” – scoa