#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"))
)