xml - 如何从 xml 文件创建 R 数据框?

标签 xml r

我有一个 XML 文档文件。该文件的一部分如下所示:

-<attr>  
     <attrlabl>COUNTY</attrlabl>  
     <attrdef>County abbreviation</attrdef>  
     <attrtype>Text</attrtype>  
     <attwidth>1</attwidth>  
     <atnumdec>0</atnumdec>  
    -<attrdomv>  
        -<edom>  
            <edomv>C</edomv>  
            <edomvd>Clackamas County</edomvd>  
            <edomvds/>  
         </edom>  
        -<edom>  
            <edomv>M</edomv>  
            <edomvd>Multnomah County</edomvd>  
            <edomvds/>  
         </edom>  
        -<edom>  
            <edomv>W</edomv>  
            <edomvd>Washington County</edomvd>  
            <edomvds/>  
         </edom>  
     </attrdomv>  
 </attr>

从这个 XML 文件中,我想创建一个包含 attrlablattrdefattrtype 列的 R 数据框>属性。请注意,attrdomv 列应包含类别变量的所有级别。数据框应如下所示:

attrlabl    attrdef                attrtype    attrdomv  
COUNTY      County abbreviation    Text        C Clackamas County; M Multnomah County; W Washington County  

我有这样一个不完整的代码:

doc <- xmlParse("taxlots.shp.xml")  
dataDictionary <- xmlToDataFrame(getNodeSet(doc,"//attrlabl"))  

你能完成我的 R 代码吗?感谢您的帮助!

最佳答案

假设这是正确的 taxlots.shp.xml 文件:

<attr>  
     <attrlabl>COUNTY</attrlabl>  
     <attrdef>County abbreviation</attrdef>  
     <attrtype>Text</attrtype>  
     <attwidth>1</attwidth>  
     <atnumdec>0</atnumdec>  
    <attrdomv>  
        <edom>  
            <edomv>C</edomv>  
            <edomvd>Clackamas County</edomvd>  
            <edomvds/>  
         </edom>  
        <edom>  
            <edomv>M</edomv>  
            <edomvd>Multnomah County</edomvd>  
            <edomvds/>  
         </edom>  
        <edom>  
            <edomv>W</edomv>  
            <edomvd>Washington County</edomvd>  
            <edomvds/>  
         </edom>  
     </attrdomv>  
 </attr>

你快到了:

doc <- xmlParse("taxlots.shp.xml")
xmlToDataFrame(nodes=getNodeSet(doc1,"//attr"))[c("attrlabl","attrdef","attrtype","attrdomv")]
  attrlabl             attrdef attrtype                                             attrdomv
1   COUNTY County abbreviation     Text CClackamas CountyMMultnomah CountyWWashington County

但是最后一个字段没有你想要的格式。为此,需要一些额外的步骤:

step1 <- xmlToDataFrame(nodes=getNodeSet(doc1,"//attrdomv/edom"))
step1
  edomv            edomvd edomvds
1     C  Clackamas County        
2     M  Multnomah County        
3     W Washington County  

step2 <- paste(paste(step1$edomv, step1$edomvd, sep=" "), collapse="; ")
step2
[1] "C Clackamas County; M Multnomah County; W Washington County"

cbind(xmlToDataFrame(nodes= getNodeSet(doc1, "//attr"))[c("attrlabl", "attrdef", "attrtype")],
      attrdomv= step2)
  attrlabl             attrdef attrtype                                                      attrdomv
1   COUNTY County abbreviation     Text C Clackamas County; M Multnomah County; W Washington County

关于xml - 如何从 xml 文件创建 R 数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13579996/

相关文章:

c# - 当子节点存在时,LINQ Xelement 返回 null

在ggplot2中旋转 strip 文本

正则表达式查找前四个并发唯一值的位置

r - 如何填写两个日期之间的日期

linux - 使用 tm : bug on linux? 在 R 函数中分配全局变量

java - RecyclerView 在 Groupie 中不可见 (Kotlin)

Python 3 XML 解析器未知实体错误

java - Android : How to clip views by parent, 像 CSS 溢出:隐藏

Android:如何在可绘制的 xml 中使用当前主题的颜色?

r - 如何根据条件将向量拆分为 R 中的不相等 block ?