通常は、xmlToDataFrame()
関数を試してみることをお勧めしますが、そもそもうまく構成されていないため、これは実際にはかなりトリッキーになると思います。
この機能を使用することをお勧めします。
xmlToList(books)
1 つの問題は、書籍ごとに複数の著者が存在することです。そのため、データ フレームを構造化する際に、それを処理する方法を決定する必要があります。
複数の著者の問題をどうするかを決定したらldply()
、plyr の関数を使用してブック リストをデータ フレームに変換するのはかなり簡単です (または、単に lapply を使用し、do を使用して戻り値を data.frame に変換します)。 .call("rbind"...)。
完全な例を次に示します (作成者を除く):
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
著者を含めると、次のようになります。ldply
リストが「ギザギザ」であるため、このインスタンスで使用する必要があります...lapplyはそれを適切に処理できません。[それ以外の場合はlapply
withを使用できますrbind.fill
(これも Hadley の厚意による) 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>