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
も分割することが可能です。 次の動画で、これらをまとめて処理をしていきます。