【问题标题】:XML parsing and dataframe conversion in RR中的XML解析和数据帧转换
【发布时间】:2015-07-19 06:07:07
【问题描述】:

我有一个在 R 中解析的 XML 文件,必须读取它并将其转换为随后可以按行 ID 排列的数据框。这是 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。

【问题讨论】:

  • 我得到的错误是“xmlParse(xml,useInternalNodes = True)中的错误:找不到对象'True'”。真应该是TRUE

标签: xml r xml-parsing


【解决方案1】:

TRUE 的逻辑值在R 中应始终全部大写。此外,为了每次观察输出一行数据帧,您应该在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>

【讨论】:

    【解决方案2】:

    你也可以在行节点上使用xmlAttrsToDataFrame

    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>
    

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 2015-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多