• R语言XML格式数据导入与处理


    数据解析

    XML是一种可扩展标记语言,它被设计用来传输和存储数据。XML是各种应用程序之间进行数据传输的最常用的工具。它与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,它仅仅是存储数据。事实上它与其他数据表现形式最大的不同是:它极其简单,这是一个看上去有点琐细的优点,但正是这点使它与众不同。

    针对XML格式数据,R语言XML包可以对其进行数据导入与处理,详见下面的案例说明。

    案例1

    直接输入一段标记语言文本,使用XML包解析。

    library(XML)
    
    tt =
      '<x>
    <a>text</a>
    <b foo="1"/>
    <c bar="me">
    <d>a phrase</d>
    </c>
    </x>'
    doc = xmlParse(tt)
    xmlToList(doc)
    # use an R-level node representation
    doc = xmlTreeParse(tt)
    xmlToList(doc)
    

    案例2

    导入已有的xml格式数据并处理,本案例用到的是手机通讯录xml数据,按如下步骤操作:

    #读取xml格式数据并解析
    xmlfile=xmlParse(file.choose(),encoding="UTF-8") 
    class(xmlfile)
    
    #形成根目录列表数据
    xmltop = xmlRoot(xmlfile) 
    class(xmltop) #查看类
    xmlName(xmltop) #查看根目录名
    xmlSize(xmltop) #查看根目录总数
    xmlName(xmltop[[1]]) #查看子目录名
    
    # 查看第一个子目录
    xmltop[[1]]
    # 查看第二个子目录
    xmltop[[2]]
    
    #子目录节点
    xmlSize(xmltop[[1]]) #子目录节点数
    xmlSApply(xmltop[[1]], xmlName) #子目录节点名
    xmlSApply(xmltop[[1]], xmlAttrs) #子目录节点属性
    xmlSApply(xmltop[[1]], xmlSize) #子目录节点大小
    
    #查看第一个子目录的第一个节点
    xmltop[[1]][[1]]
    #查看第一个子目录的第二个节点
    xmltop[[1]][[2]]
    
    #第二个子目录
    xmltop[[2]][[1]]
    xmltop[[2]][[2]]
    
    xmltop[[1]][[3]][[1]][[1]] #查看联系人电话
    xmltop[['Contact']][['PhoneList']][[1]][[1]]  #第二种方式
    getNodeSet(xmltop, "//Contact/PhoneList")[[1]][[1]][[1]] #第三种方式
    
    xmltop[[1]][[3]][[1]][[1]] = 13717232323 #更改联系人电话
    xmltop[[1]][[1]][[1]]= "zhangsan "#更改联系人姓名
    
    #保存
    saveXML(xmltop, file="out.xml",encoding="UTF-8")
    

    xml格式转dataframe

    按如下步骤操作:

    xmlToDataFrame(xmlfile) #第一种方式,直接用xmlToDataFrame()函数
    
    library("plyr") #第二种方式,数据格式处理专用包plyr
    
    MyContact=ldply(xmlToList(file.choose()), data.frame) #先转成list,再转dataframe
    View(MyContact)
    
    # 查看联系方式
    MyContact[,c("Name" ,"PhoneList.Phone.text")]
    
    # 联系方式保存
    write.csv(MyContact, "MyContact.csv", row.names=FALSE)
    
    

    反馈与建议

  • 相关阅读:
    java基础(七) java四种访问权限
    java基础(六) switch语句的深入解析
    JavaSe: 不要小看了 Serializable
    对于培训出身的同学,接下来该怎么学习技术?
    Java Tomcat7性能监控与优化详解
    模仿spring-aop的功能,利用注解搭建自己的框架。
    动态页面技术EL
    如何在mysql客户端即mysql提示符下执行操作系统命令
    通过notepad++将混乱的xml配置的格式进行美化
    shell脚本中,for基于列表进行循环的实现方法
  • 原文地址:https://www.cnblogs.com/shangfr/p/5564167.html
Copyright © 2020-2023  润新知