Home > front end >  Tidy text from multiple columns to one
Tidy text from multiple columns to one

Time:09-23

I get this data from importing an excel file in R. Need this as input for tidymodel.

tibble::tribble(
        ~op_saal,      ~vorname,   ~seite,                                                      ~info,
              NA,            NA,       NA,                                                         NA,
          "AOZ1",       "Heinz",  "links", "Tendovaginitis stenosans, Sehnenfachspaltung Beugesehnen",
              NA,            NA,       NA,                                     "PP fub: TVS D3 links",
              NA,            NA,       NA,                                                         NA,
          "AOZ1",       "Robin",  "links",                                                "Allgemein",
              NA,            NA,       NA,       "FUB: Tenoarthrolyse Beugeseitig D4 links Mittelgel",
              NA,            NA,       NA,                    "enk mit PK 1 Nacht Stat. (06:30 Uhr )",
              NA,            NA,       NA,                                                         NA,
          "AOZ1",     "Christa", "rechts",                                         "Metallentfernung",
              NA,            NA,       NA,       "Metallentfernung dorsale Platte dist. Radius und l",
              NA,            NA,       NA,        "angstreckige Tenoarthroslyse D3 4 rechts, 1 Nacht",
              NA,            NA,       NA,                                                "stat., PK",
              NA,            NA,       NA,                                                         NA,
          "AOZ1",       "Osman",  "links",                                           "Ulnaverkürzung",
              NA,            NA,       NA,              "Ulnaverkürzung links bei Ulna Impaction li.",
              NA,            NA,       NA,                                                         NA,
          "AOZ1",      "Fabian",  "links",                                  "Arthroskopie Handgelenk",
              NA,            NA,       NA,       "Arthroskopie Handgelenk links bei V.a. TFCC Läsion",
              NA,            NA,       NA,                                                    "links",
              NA,            NA,       NA,                                                         NA,
          "AOZ1",      "Olgica",  "links",                                                "Allgemein",
              NA,            NA,       NA,       "Daumengrundgelenksarthrose links, Arthrodese mitte",
              NA,            NA,       NA,                                            "ls Zuggurtung",
              NA,            NA,       NA,                                                         NA,
          "AOZ1",       "Alwin",  "links",                                                "Allgemein",
              NA,            NA,       NA,       "Synovektomie 4. Strecksehnenfach li. HG dorsal, Er",
              NA,            NA,       NA,       "elzi abgesetzt 14 T vorher , Hauptlokalisation Str",
              NA,            NA,       NA,                                 "ecksehnen Zone 6-7 links",
              NA,            NA,       NA,                                                         NA,
          "AOZ1", "Desiree-Kim",  "links",                                  "Arthroskopie Handgelenk",
              NA,            NA,       NA,        "Arthroskopie HG links, V.a. TFCC Läsion, minimale",
              NA,            NA,       NA,       "DRUG Instabilität, falls TFCC- Refixierung, dann s",
              NA,            NA,       NA,                                                 "tationär",
              NA,            NA,       NA,                                                         NA,
          "AOZ1",      "Jannis", "rechts",                                                "Allgemein",
              NA,            NA,       NA,       "Ishiguro bei knöchernem Strecksehnenausriss D3 rec",
              NA,            NA,       NA,                                                      "hts",
              NA,            NA,       NA,                                                         NA,
          "AOZ1",      "Danica", "rechts",                                             "Rhizarthrose",
              NA,            NA,       NA,                                      "Rhizarthrose rechts"
        )

I need to tidy this data. Text contained in "info" should be is one cell in the row of the respective entry, so that I get one row per entry without change of the columns names. The info for the first row:
AOZ1 | Heinz |links

should be:

info: "Tendovaginitis stenosans, Sehnenfachspaltung Beugesehnen PP fub: TVS D3 links"

The info of third entry:

"Metallentfernung dorsale Platte dist. Radius und langstreckige Tenoarthroslyse D3 4 rechts, 1 Nacht stat., PK",

our EHR (electronic health record) produces strange exports ;-)

CodePudding user response:

Using tidyr::fill, a bit of dplyr and finally some regex to clean up the strings you could do:

library(tidyr)
library(dplyr)

df |> 
  fill(op_saal, vorname, seite) |> 
  drop_na() |> 
  group_by(op_saal, vorname, seite) |> 
  summarise(info = paste(info, collapse = ""), .groups = "drop") |> 
  mutate(info = gsub("([[:lower:]])([[:upper:]])", "\\1 \\2", info))
#> # A tibble: 10 × 4
#>    op_saal vorname     seite  info                                              
#>    <chr>   <chr>       <chr>  <chr>                                             
#>  1 AOZ1    Alwin       links  Allgemein Synovektomie 4. Strecksehnenfach li. HG…
#>  2 AOZ1    Christa     rechts Metallentfernung Metallentfernung dorsale Platte …
#>  3 AOZ1    Danica      rechts Rhizarthrose Rhizarthrose rechts                  
#>  4 AOZ1    Desiree-Kim links  Arthroskopie Handgelenk Arthroskopie HG links, V.…
#>  5 AOZ1    Fabian      links  Arthroskopie Handgelenk Arthroskopie Handgelenk l…
#>  6 AOZ1    Heinz       links  Tendovaginitis stenosans, Sehnenfachspaltung Beug…
#>  7 AOZ1    Jannis      rechts Allgemein Ishiguro bei knöchernem Strecksehnenaus…
#>  8 AOZ1    Olgica      links  Allgemein Daumengrundgelenksarthrose links, Arthr…
#>  9 AOZ1    Osman       links  Ulnaverkürzung Ulnaverkürzung links bei Ulna Impa…
#> 10 AOZ1    Robin       links  Allgemein FUB: Tenoarthrolyse Beugeseitig D4 link…

CodePudding user response:

An alternative:

df %>% mutate(across(everything(), ~replace_na(.x, '')),
              is_entry = if_else(op_saal != '', 1, 0),
              entry = is_entry %>% cumsum) %>% group_by(entry) %>% 
  mutate(info = paste0(info, collapse = ' '))  %>%  ungroup() %>%
 filter(is_entry == 1) %>% select(-is_entry, -entry)

Output:

# A tibble: 10 × 4
   op_saal vorname     seite  info                                              
   <chr>   <chr>       <chr>  <chr>                                             
 1 AOZ1    Heinz       links  "Tendovaginitis stenosans, Sehnenfachspaltung Beu…
 2 AOZ1    Robin       links  "Allgemein FUB: Tenoarthrolyse Beugeseitig D4 lin…
 3 AOZ1    Christa     rechts "Metallentfernung Metallentfernung dorsale Platte…
 4 AOZ1    Osman       links  "Ulnaverkürzung Ulnaverkürzung links bei Ulna Imp…
 5 AOZ1    Fabian      links  "Arthroskopie Handgelenk Arthroskopie Handgelenk …
 6 AOZ1    Olgica      links  "Allgemein Daumengrundgelenksarthrose links, Arth…
 7 AOZ1    Alwin       links  "Allgemein Synovektomie 4. Strecksehnenfach li. H…
 8 AOZ1    Desiree-Kim links  "Arthroskopie Handgelenk Arthroskopie HG links, V…
 9 AOZ1    Jannis      rechts "Allgemein Ishiguro bei knöchernem Strecksehnenau…
10 AOZ1    Danica      rechts "Rhizarthrose Rhizarthrose rechts" 
  • Related