Преобразование XML в Dataframe в R - PullRequest
0 голосов
/ 01 апреля 2019

Я борюсь с преобразованием XML в Dataframe в R см. XML здесь

До сих пор мне удалось получить все атрибуты xml в кадре данных, но мне нужна информация "Q id" для нескольких "qualifier_id". Вот текущий код:

df_list <- lapply(list.filenames, function(f) {
doc <- read_xml(f)

setNames(data.frame(
  xml_attr(xml_find_all(doc, "//Event"), "timestamp"),
  xml_attr(xml_find_all(doc, "//Event"), "id"),
  xml_attr(xml_find_all(doc, "//Event"), "version"),
  xml_attr(xml_find_all(doc, "//Event"), "last_modified"),
  xml_attr(xml_find_all(doc, "//Event"), "y"),
  xml_attr(xml_find_all(doc, "//Event"), "x"),
  xml_attr(xml_find_all(doc, "//Event"), "outcome"),
  xml_attr(xml_find_all(doc, "//Event"), "team_id"),
  xml_attr(xml_find_all(doc, "//Event"), "sec"),
  xml_attr(xml_find_all(doc, "//Event"), "min"),
  xml_attr(xml_find_all(doc, "//Event"), "period_id"),
  xml_attr(xml_find_all(doc, "//Event"), "type_id"),
  xml_attr(xml_find_all(doc, "//Event"), "event_id")

), c("timestamp", "id", "version", "last_modified", "y", "x", "outcome", "team_id", "sec", "min", "period_id", "type_id", "event_id"))

})

Фрейм данных выглядит следующим образом: Dataframe

В идеале, у меня были бы дополнительные столбцы для нескольких "qualifier_id". Например, столбец с именем «213» со значениями из «значения» и NA, если его там нет.

Заранее спасибо

1 Ответ

0 голосов
/ 01 апреля 2019

Вы уже используете xml2, так что это довольно легко, используя правильный xpath ..

library(xml2)

образец данных

doc <- read_xml("<?xml version='1.0' encoding='ISO-8859-1'?>
                <root>
                <Event id='1'>
                <Q id='' qualifier_id='12'/>
                <Q id='' qualifier_id='123' value='hello'/>
                <Q id='' qualifier_id='1234'/>
                <Q id='' qualifier_id='1' value='goodbye'/>
                </Event>
                <Event id='2'>
                <Q id='' qualifier_id='2'/>
                <Q id='' qualifier_id='1234'/>
                <Q id='' qualifier_id='1' value='goodbye'/>
                </Event>
                </root>")

код

#get list of Event-nodes
Event.nodes <- xml_find_all( doc, "//Event")

#in each node, find the first Q-node with qualifier_id attribute == 123
#from this node, extract the value of attribute 'value' 
#if no Q-node is found, return NA
xml_attr( xml_find_first( Event.nodes, "./Q[@qualifier_id='123']"), "value" )

#[1] "hello" NA 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...