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"