2014-11-08 4 views
1

Здравствуйте, ребята, Мне нужно загрузить XML-файл в кадр данных в R. Формат xml выглядит так, как показано ниже. Как я получу то же самое?Как преобразовать xml данные в фрейм данных в R

  <?xml version="1.0" encoding="utf-8"?><posts> <row Id="1" PostTypeId="1" AcceptedAnswerId="17" CreationDate="2010-07-26T19:14:18.907" Score="6"/></posts> 

Я пробовал приведенный ниже код .... Он не дает желаемого результата. Я ожидаю вывести табличный вывод с именами столбцов и их значениями, перечисленными ниже.

library(XML) 
xml.url ="test.xml" 
xmlfile = xmlTreeParse(xml.url) 

class(xmlfile) 
xmltop=xmlRoot(xmlfile) 

print(xmltop)[1:2] 

plantcat <- xmlSApply(xmltop, function(x) xmlSApply(x, xmlValue)) 

plantcat_df <- data.frame(t(plantcat)) 
+1

Что именно представляет собой структура желаемого результата? Вы вообще что-то пробовали? Мы не здесь, чтобы написать для вас код. Вы должны показать, что вы пытались, и описать, как это происходит. Я предполагаю, что ваши попытки google проблемы по крайней мере позволяют вам в пакет 'XML' для R анализировать ваш ввод. – MrFlick

+0

Здравствуйте, я попробовал библиотеку ниже кода (XML) xml.url = "test.xml" XMLFILE = xmlTreeParse (xml.url) класс (XMLFILE) xmltop = xmlRoot (XMLFILE) печати (xmltop) [1: 2] plantcat <- xmlSApply (xmltop, функция (х) xmlSApply (х, xmlValue)) plantcat_df <- data.frame (т (plantcat)) – Zack

+0

Я ожидал табличный вывод, где я столбцы как «строка Id», «PostTypeId», «AcceptedAnswerId», «CreationDate», «Score», а затем значения r, перечисленные ниже (например, вы получаете, когда вы запрашиваете таблицу базы данных) ... – Zack

ответ

3
xml.text <- 
'<?xml version="1.0" encoding="utf-8"?> 
<posts> 
<row Id="1" PostTypeId="1" AcceptedAnswerId="17" CreationDate="2010-07-26T19:14:18.907" Score="6"/> 
<row Id="2" PostTypeId="1" AcceptedAnswerId="17" CreationDate="2010-07-26T19:14:18.907" Score="6"/> 
<row Id="3" PostTypeId="1" AcceptedAnswerId="17" CreationDate="2010-07-26T19:14:18.907" Score="6"/> 
<row Id="4" PostTypeId="1" AcceptedAnswerId="17" CreationDate="2010-07-26T19:14:18.907" Score="6"/> 
</posts>' 

library(XML) 
xml <- xmlParse(xml.text) 
result <- as.data.frame(t(xmlSApply(xml["/posts/row"],xmlAttrs)), 
         stringsAsFactors=FALSE) 
# Id PostTypeId AcceptedAnswerId   CreationDate Score 
# 1 1   1    17 2010-07-26T19:14:18.907  6 
# 2 2   1    17 2010-07-26T19:14:18.907  6 
# 3 3   1    17 2010-07-26T19:14:18.907  6 
# 4 4   1    17 2010-07-26T19:14:18.907  6 

Это немного сложнее, чем обычно, потому что данные в атрибутах, а не узлы (узлы пустуют), поэтому мы не можем использовать xlmToDataFrame(...), к сожалению.

Все приведенные выше данные по-прежнему являются символами, поэтому вам все равно нужно преобразовать столбцы в любой класс.

+0

Вы также можете использовать xmlAttrsToDataFrame. XML ::: xmlAttrsToDataFrame (xmlRoot (xml)) –

+0

@ChrisS. - Вы должны опубликовать это как ответ. Я понятия не имел, что эта функция существует ... Я не могу найти ее нигде в документации. Какие еще недокументированные самородки есть? – jlhoward

+0

Я только начал читать новые XML и веб-технологии для Data Sciences в книге R и заметил это там, но я не уверен, почему это не лучше документировано. –

Смежные вопросы