XML Nodeset в R dataframe - PullRequest
       26

XML Nodeset в R dataframe

0 голосов
/ 28 мая 2020

У меня есть набор узлов, который я извлек из файла XML, который выглядит следующим образом:

   <section id="A00-A09">
      <desc>Intestinal infectious diseases (A00-A09)</desc>
      <diag>
        <name>A00</name>
        <desc>Cholera</desc>
        <diag>
          <name>A00.0</name>
          <desc>Cholera due to Vibrio cholerae 01, biovar cholerae</desc>
          <inclusionTerm>
            <note>Classical cholera</note>
          </inclusionTerm>
        </diag>
        <diag>
          <name>A00.1</name>
          <desc>Cholera due to Vibrio cholerae 01, biovar eltor</desc>
          <inclusionTerm>
            <note>Cholera eltor</note>
          </inclusionTerm>
        </diag>
        <diag>
          <name>A00.9</name>
          <desc>Cholera, unspecified</desc>
        </diag>
      </diag>

Как мне преобразовать его в фрейм данных в R, который будет выглядеть так:

name      desc                  
A00       Cholera               
A00.0     biovar cholerae     
A00.1     biovar eltor          
A00.9     Cholera, unspecified   

Я просмотрел пару сообщений, посвященных от XML до df в R, но все они, похоже, указаны для файла xml, с которым работает (что имеет смысл, учитывая xml), но Я новичок в извлечении данных из xml и не смог найти что-то, что работает с элементами 44487 в моем xml_NodeSet. К вашему сведению, я использовал xml2 для разбора файла xml.

1 Ответ

1 голос
/ 28 мая 2020

Спасибо @Nadia за предложение. Не было URL-адреса для файла XML, с которым я работал, поэтому мне пришлось использовать xml_nodes() и xml_text().

У меня были проблемы с отсутствующими значениями для note и, к счастью, после просмотра эти данные не будут столь ценными, как я ожидал ранее. Таким образом, я смог его отбросить, и это сделало вопрос более разумным.

Вот что я сделал:

#after extracting the nodeset from my xml file
names <- xml_text(xml_nodes(diags, "name"))
desc <- xml_text(xml_nodes(diags, "desc"))

#convert to lists
names_list <- list(names)
desc_list <- list(desc)

#bring into a dataframe
df <- do.call(rbind, Map(data.frame, A=names_list, B=desc_list))

head(df)
  icdcode                                               name
1     A00                                            Cholera
2   A00.0 Cholera due to Vibrio cholerae 01, biovar cholerae
3   A00.1    Cholera due to Vibrio cholerae 01, biovar eltor
4   A00.9                               Cholera, unspecified
5     A01                     Typhoid and paratyphoid fevers
6   A01.0                                      Typhoid fever
...