Как загрузить структурированные XML-данные в R?

#r #xml #database #dataframe #data-wrangling

#r #xml #База данных #dataframe #перебор данных

Вопрос:

У меня есть не плоская XML-база данных, которую я хочу превратить в R-фрейм данных. Я проанализировал это следующим образом:

 page <- xmlParse("<dataset>
  <language>
    <name>Old_Irish</name>
    <definite>
    <definite_source>Demonstrative</definite_source>
    <definite_article>1</definite_article>
    </definite>
    <n_cases>5</n_cases>
  </language>
  <language>
    <name>Irish</name>
    <definite>
    <definite_source>Demonstrative</definite_source>
    <definite_article>1</definite_article>
    </definite>
    <n_cases>4</n_cases>
  </language>
</dataset>")
  

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

 xmlToDataFrame(page, stringsAsFactors = FALSE,) %>% 
                        mutate_all(~type.convert(., as.is = T))
  

Это результат:

        name       definite n_cases
1 Old_Irish Demonstrative1       5
2     Irish Demonstrative1       4
  

Но что я хочу этого:

        name  definite_source     definite_article n_cases
1 Old_Irish   Demonstrative              1          5
2     Irish   Demonstrative              1          4
  

Как мне создать столбцы, которые вложены внутри <definite>...</definite> ?

Ответ №1:

Рассмотрите возможность привязки обоих уровней узлов, предполагая, что под каждым из них не более одного definite узла language :

 df <- cbind.data.frame(
         xmlToDataFrame(nodes=getNodeSet(page,"//language")),
         xmlToDataFrame(nodes=getNodeSet(page,"//definite"))
      )