Normalmente, sugeriría probar la función xmlToDataFrame()
, pero creo que esto en realidad será bastante complicado porque, para empezar, no está bien estructurado.
Yo recomendaría trabajar con esta función:
xmlToList(books)
Un problema es que hay varios autores por el libro, por lo que tendrá que decidir cómo manejar eso cuando se está estructurando su trama de datos.
Una vez que haya decidido qué hacer con el problema de varios autores, es bastante sencillo convertir su lista de libros en un marco de datos con la función ldply()
en plyr (o simplemente use lapply y convierta el valor devuelto en datos . .Frame utilizando do.call ("rbind" ...)
Aquí está un ejemplo completo (excluyendo autor):.
library(XML)
books <- "w3schools.com/xsl/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
Esto es lo que parece con el autor incluyó es necesario utilizar ldply
en este caso, dado que la lista es "irregular" ... lapply no puede manejar eso correctamente. [De lo contrario, puede usar lapply
con rbind.fill
(también cortesía de Hadley), pero ¿por qué se molestan cuando plyr
hace automáticamente por usted]:?
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>
"? Pero ¿por qué molestarse cuando plyr hace automáticamente por usted" me encuentro diciendo que una gran cantidad . –
Pregunta: en mi caso, el código produce un error "Error al cargar el recurso HTTP Error: 1: error al cargar el recurso HTTP". ¿Porqué es eso? – user2006697
@ user2006697 el enlace se mueve a: "http://www.w3schools.com/xsl/books.xml" – zyurnaidi