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