簡體   English   中英

將 XML 文件導入 R 中的數據框

[英]Import XML file to data frame in R

我在將具有特定結構的 XML 文件導入 R 中的 dataframe 時遇到困難。

可以在此處找到 XML 文件的示例: XML 導入

最終結果應該是一個結構良好的數據框,直到 XML 文件的最深嵌套級別 (Adms): 的例子

這意味着數據在其他列中重復,但這不是問題。

我已經嘗試了在 StackOverflow 上找到的用於 XML 導入的多種解決方案,但由於 XML 文件的結構,我無法讓它工作。

因此,目前我需要 go 到 Excel,並使用“GetData”選項將 XML 轉換為 CSV,但由於我有 100 個這樣的 XML 需要處理,所以我想自動執行此任務。

預先感謝您的幫助!

這將為您提供每行一位患者:

library(xml2)
library(XML)
library(tidyverse)

xml <-
  read_xml("~/Downloads/00000123456_0000071234567123_20150922101212_TH.XML") %>%
  xmlParse()

xml %>%
  xmlToDataFrame(nodes = getNodeSet(xml, "//Patient")) %>%
  as_tibble()
#> # A tibble: 12 x 15
#>    Id      Name      Firstname HomeID Location1   Location2  Location3 Location4
#>    <chr>   <chr>     <chr>     <chr>  <chr>       <chr>      <chr>     <chr>    
#>  1 360923… Van den … Freya     002    VILLA TRAN… 1e verdie… Sectie 1  104      
#>  2 211209… Verhofst… Guy       004    VILLA TRAN… 1e verdie… Sectie 1  102      
#>  3 410630… Hanckeli… Laurette  005    VILLA TRAN… 1e verdie… Sectie 1  102      
#>  4 251019… Smaak     Antoinet… 007    VILLA TRAN… 1e verdie… Sectie 1  101      
#>  5 281213… Areno     Marie     008    VILLA TRAN… 1e verdie… Sectie 1  103      
#>  6 190219… De Waen   Patrick   010    VILLA TRAN… 2e verdie… Sectie 2  203      
#>  7 271023… Vande Ma… Johan     012    VILLA TRAN… 2e verdie… Sectie 2  201      
#>  8 311215… Dirupa    Elise     014    VILLA TRAN… 2e verdie… Sectie 2  202      
#>  9 320704… Zomers    Bertha    015    VILLA TRAN… 2e verdie… Sectie 1  202      
#> 10 100112… Daerdenne Micheline 019    VILLA TRAN… 2e verdie… Sectie 2  204      
#> 11 461217… Schoeppe  Antoine   021    VILLA TRAN… 1e verdie… Sectie 1  101      
#> 12 201114… Vanrompu… Germain   022    VILLA TRAN… 2e verdie… Sectie 2  206      
#> # … with 7 more variables: Location5 <chr>, Birthdate <chr>, DoctorName <chr>,
#> #   DoctorMedRegNr <chr>, PatientUnidose <chr>, Shortstay <chr>, Products <chr>

reprex package (v2.0.0) 創建於 2022-02-16

由於 Products 不能放入 Patients 表的列名中,因此可以將它們放在一列中:

read_xml("~/Downloads/00000123456_0000071234567123_20150922101212_TH.XML") %>%
  xml_find_all("//Patient") %>%
  as_list() %>%
  map(~ {
    .x %>%
      enframe() %>%
      filter(name != "Products") %>%
      unnest_auto(value) %>%
      pivot_wider() %>%
      mutate(Products = list(.x$Products))
  }) %>%
  bind_rows()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM