如何将XML数据转换为data.frame?

我试图学习R的XML包。我试图从books.xml样本xml数据文件创建一个data.frame。这里是我得到:
library(XML)
books <- "http://www.w3schools.com/XQuery/books.xml"
doc <- xmlTreeParse(books,useInternalNodes = TRUE)
doc
xpathApply(doc,"//book",function(x) do.call(paste,as.list(xmlValue(x))))
xpathSApply(doc,function(x) strsplit(xmlValue(x)," "))
xpathSApply(doc,"//book/child::*",xmlValue)

这些xpathSApply的每个都不让我甚至接近我的意图。如何进行一个良好的数据框架?

通常,我建议尝试xmlToDataFrame()函数,但我相信这实际上是相当棘手的,因为它不是很好的结构开始。

我建议使用此功能

xmlToList(books)

一个问题是每本书有多个作者,所以你需要决定在构造数据框架时如何处理。

一旦你决定了如何处理多个作者的问题,那么相当简单的方法是使用plyr中的ldply()函数将你的图书列表变成一个数据框架(或者只是使用lapply并将返回值转换为data.frame通过使用do.call(“rbind”…)。

这里有一个完整的例子(不包括作者):

library(XML)
books <- "http://www.w3schools.com/XQuery/books.xml"
library(plyr)
ldply(xmlToList(books),function(x) { data.frame(x[!names(x)=="author"]) } )

   .id        title.text title..attrs year price   .attrs
 1 book  Everyday Italian           en 2005 30.00  COOKING
 2 book      Harry Potter           en 2005 29.99 CHILDREN
 3 book XQuery Kick Start           en 2003 49.99      WEB
 4 book      Learning XML           en 2003 39.95      WEB

这里是作者包括看起来像。你需要在这个实例中使用ldply,因为列表是“jagged”… lapply不能正确处理。 [否则你可以使用lapply与rbind.fill(也礼貌的哈德利),但为什么打扰时,plyr自动为你吗?]:

ldply(xmlToList(books),data.frame)

   .id        title.text title..attrs              author year price   .attrs
1 book  Everyday Italian           en Giada De Laurentiis 2005 30.00  COOKING
2 book      Harry Potter           en        J K. Rowling 2005 29.99 CHILDREN
3 book XQuery Kick Start           en      James McGovern 2003 49.99      WEB
4 book      Learning XML           en         Erik T. Ray 2003 39.95      WEB
     author.1   author.2   author.3               author.4
1        <NA>       <NA>       <NA>                   <NA>
2        <NA>       <NA>       <NA>                   <NA>
3 Per Bothner Kurt Cagle James Linn Vaidyanathan Nagarajan
4        <NA>       <NA>       <NA>                   <NA>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇