157  看護記録もどきの加工2

library(tidyverse)

{
  kiroku7 <- readxl::read_excel("data/看護記録もどき.xlsx") %>% 
    mutate(name = 
            if_else(
              str_detect(`患者名`,"^\\s"), 
              NA_character_,
              `患者名`)) %>%
    fill(name) %>% 
    select(name, sokutei = `患者名`, everything()) %>% 
    mutate(sokutei = if_else(
      str_detect(sokutei,"^\\s"),
      sokutei, "admission"
    )) %>% 
    mutate(sokutei = str_trim(sokutei)) %>% 
    pivot_longer(cols = !c(name,sokutei),
                names_to = "date",
                values_to = "val") %>%
    filter(!is.na(val))
}

例えば処理例として、

wide <- kiroku7 %>% 
  pivot_wider(
    id_cols = c(name, date),
    names_from = sokutei,
    values_from = val
  ) %>% 
  arrange(name, date)

で、sokutei項目毎の列を入れたwideデータに変換して、

View(wide)

wide2 <- wide %>% 
  rename(bp = `血圧`, pulse = `脈拍`, rr = `呼吸回数`, meal = `食事`)

変数名を英語に変えておいて、

wide2 %>% 
  select(bp) %>% 
  separate(bp,c("am","pm"),sep="-", remove=FALSE) %>% 
  separate(am,c("am_sbp","am_dbp"), sep="/",remove=FALSE) %>% 
  separate(pm,c("pm_sbp","pm_dbp"), sep="/",remove=FALSE) %>%
  mutate(
    am_sbp = str_trim(am_sbp) %>% na_if(""),
    pm_sbp = na_if(pm_sbp,"")
  )
Warning: Expected 2 pieces. Missing pieces filled with `NA` in 1 rows [1].
Warning: Expected 2 pieces. Missing pieces filled with `NA` in 1 rows [4].
# A tibble: 6 × 7
  bp            am       am_sbp am_dbp pm       pm_sbp pm_dbp
  <chr>         <chr>    <chr>  <chr>  <chr>    <chr>  <chr> 
1    -128/88       <NA>   <NA>   "128/88" 128    88    
2 130/78-120/72 130/78   130    78     "120/72" 120    72    
3 128/82-140/76 128/82   128    82     "140/76" 140    76    
4 130/68 -     130/68  130    68    ""       <NA>   <NA>  
5 100/60-98/58  100/60   100    60     "98/58"  98     58    
6 106/54-90/50  106/54   106    54     "90/50"  90     50    

こんな感じで、bp列を午前と午後のSBP、DBP、計4つの列に分割します。

同じように、脈拍、

wide2 %>% 
  select(pulse) %>% 
  separate(pulse,c("am_pulse","pm_pulse"), remove=FALSE) %>% 
  mutate(pm_pulse = na_if(pm_pulse,""))
# A tibble: 6 × 3
  pulse     am_pulse pm_pulse
  <chr>     <chr>    <chr>   
1 92 - 90 92       90      
2 89 - 83 89       83      
3 83 - 80 83       80      
4 88 -     88       <NA>    
5 60 - 62 60       62      
6 64 - 66 64       66      

呼吸回数

wide2 %>% 
  select(rr) %>% 
  separate(rr,c("am_rr","pm_rr"),
           sep="-",remove=FALSE) %>% 
  mutate(
    am_rr = str_replace(am_rr,"回",""),
    pm_rr = 
      str_replace(pm_rr,"回","") %>% 
      str_trim() %>% 
      na_if("")
  )
# A tibble: 6 × 3
  rr        am_rr pm_rr
  <chr>     <chr> <chr>
1 16 - 20 16   20   
2 12回-16回 12    16   
3 20 - 16 20   16   
4 16 -     16   <NA> 
5 20 - 16 20   16   
6 16 - 20 16   20   

食事

wide2 %>% 
  select(meal) %>% 
  separate(meal, c("morning_meal","lunch_meal","dinner_meal"),
           sep="-", remove=FALSE) %>% 
  mutate(
    morning_meal = 
      str_remove(morning_meal,"割") %>% 
      str_trim() %>% 
      na_if("")
  ) %>% 
  mutate(
    lunch_meal = str_remove(lunch_meal,"割") %>% 
      str_trim() %>% 
      na_if("")
  ) %>% 
  mutate(
    dinner_meal = str_remove(dinner_meal,"割") %>% 
      str_trim() %>% 
      na_if("")
  )
Warning: Expected 3 pieces. Missing pieces filled with `NA` in 1 rows [4].
# A tibble: 6 × 4
  meal           morning_meal lunch_meal dinner_meal
  <chr>          <chr>        <chr>      <chr>      
1  -10-8        <NA>         10         8          
2 8割-9割-10割   8            9          10         
3 7割-8割-10割   7            8          10         
4 10-            10           <NA>       <NA>       
5 -10割-10割     <NA>         10         10         
6 10割-10割-10割 10           10         10         

も分割することが可能です。 次の動画で、これらをまとめて処理をしていきます。