Быстро читайте xml-файл и конвертируйте в кадр данных

Ben спросил: 26 декабря 2017 в 07:54 в: r

У меня есть XML-файл Tags.xml, структурированный таким образом

<?xml version="1.0" encoding="utf-8"?>
<tags>
  <row Id="1" TagName=".net" Count="261481" ExcerptPostId="3624959" WikiPostId="3607476" />
  <row Id="2" TagName="html" Count="710104" ExcerptPostId="3673183" />
  <row Id="3" TagName="javascript" Count="1519901" ExcerptPostId="3624960" WikiPostId="3607052" />
...
</tags>

Он относительно хорошо структурирован, за исключением того, что в некоторых строках отсутствуют атрибуты (например, в строке 2 выше отсутствует WikiPostId). Я могу преобразовать данные в data.table (или data.frame) со следующим кодом

library(XML)
library(data.table)# Read XML
tagsXML <- xmlParse("Tags.xml")# Convert to List
tagsList <- xmlToList(tagsXML)# Each List element is a character vector.  Convert each of these into a data.table
tagsList <- lapply(tagsList, function(x) as.data.table(as.list(x)))# Rbind all the 1-row data.tables into a single data.table
tags <- rbindlist(tagsList, use.names = T, fill = T)

Это работает, но кажется излишне медленным. Есть ли более быстрый способ сделать это, учитывая хорошо структурированный характер моих данных? Я попытался использовать xpath, как рекомендовано в этом ответе , но не увенчался успехом. Например, если я попытаюсь извлечь значения Id в каждой строке с помощью tagsXML[["(//tags/@Id)"]], я получаю сообщение об ошибке.


0 ответов