针对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)
反馈与建议以上就是r语言xml格式数据导入与处理 - shangfr的内容。
