136  練習問題

この練習問題では、厚生労働省の令和2年、2020年の食中毒の発生状況一覧のデータから、病因物質別月別食中毒発生状況のデータを私がこの問題のために加工したデータを用います。

尚、オリジナルデータは、

https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/shokuhin/syokuchu/04.html#j4-2

に2021年4月12日時点でアクセスできます。

問題1:

data/fill.xlsxファイルをインポートしてください。

問題2:

datの病因物質という名前の列をcause1, …2という名前の付いた列をcause2という名前に変更してください。

問題3:

cause1、cause2列とも、余分なスペースがはいっているためそれをすべて取り除いてください。

問題4:

cause1を埋めてください。また、cause1で、埋める前に値が入っている行は、集計された結果であるため、集計結果は表から削除してください。

問題5:

問題4で作成した表をdataフォルダの中に、fill2.csvという名前で保存してください。そのCSVは次の練習問題で利用します。

問題1:

data/fill.xlsxファイルをインポートしてください。

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.2     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ ggplot2   3.4.2     ✔ tibble    3.2.1
✔ lubridate 1.9.2     ✔ tidyr     1.3.0
✔ purrr     1.0.1     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)

dat <- read_excel("data/fill.xlsx")
New names:
• `` -> `...2`

すこしエクセルファイルを開いて眺めていただきたいのですが、Rで結合されているデータを読み込むと、結合が解除されて、一番左上の位置にあるデータとして扱われます。

ここでは、病因物質のA1、A2にかけてマージされていたセルが解除されて、1列目の名前が病因物質、2列目の名前が空白だったため、自動的に、…2という名前に変更されています。

View(dat)

問題2:

datの病因物質という名前の列をcause1, …2という名前の付いた列をcause2という名前に変更してください。

dat2 <- dat %>% 
  rename(`cause1` = `病因物質`,
         `cause2` = `...2`)

問題3:

cause1、cause2列とも、余分なスペースがはいっているためそれをすべて取り除いてください。

dat3 <- dat2 %>% 
  mutate(
    cause1 = str_replace_all(cause1,"\\s",""),
    cause2 = str_replace_all(cause2,"\\s","")
  )

dat3
# A tibble: 31 × 38
   cause1 cause2  事件_1 患者_1 死者_1 事件_2 患者_2 死者_2 事件_3 患者_3 死者_3
   <chr>  <chr>   <chr>  <chr>  <chr>  <chr>  <chr>  <chr>  <chr>  <chr>  <chr> 
 1 細菌   <NA>    8      154    -      11     430    -      11     94     -     
 2 <NA>   サルモ… 1      95     -      -      -      -      -      -      -     
 3 <NA>   ぶどう… 1      28     -      2      22     -      -      -      -     
 4 <NA>   ボツリ… -      -      -      -      -      -      -      -      -     
 5 <NA>   腸炎ビ… -      -      -      -      -      -      -      -      -     
 6 <NA>   腸管出… -      -      -      -      -      -      -      -      -     
 7 <NA>   その他… -      -      -      -      -      -      -      -      -     
 8 <NA>   ウエル… 1      10     -      2      363    -      1      37     -     
 9 <NA>   セレウ… -      -      -      -      -      -      -      -      -     
10 <NA>   エルシ… -      -      -      -      -      -      -      -      -     
# ℹ 21 more rows
# ℹ 27 more variables: 事件_4 <chr>, 患者_4 <chr>, 死者_4 <chr>, 事件_5 <chr>,
#   患者_5 <chr>, 死者_5 <chr>, 事件_6 <chr>, 患者_6 <chr>, 死者_6 <chr>,
#   事件_7 <chr>, 患者_7 <chr>, 死者_7 <chr>, 事件_8 <chr>, 患者_8 <chr>,
#   死者_8 <chr>, 事件_9 <chr>, 患者_9 <chr>, 死者_9 <chr>, 事件_10 <chr>,
#   患者_10 <chr>, 死者_10 <chr>, 事件_11 <chr>, 患者_11 <chr>, 死者_11 <chr>,
#   事件_12 <chr>, 患者_12 <chr>, 死者_12 <chr>

問題4:

cause1を埋めてください。また、cause1で、埋める前に値が入っている行は、集計された結果であるため、集計結果は表から削除してください。

dat4 <- dat3 %>% 
  fill(cause1) %>% 
  filter(!is.na(cause2))
dat4
# A tibble: 24 × 38
   cause1 cause2  事件_1 患者_1 死者_1 事件_2 患者_2 死者_2 事件_3 患者_3 死者_3
   <chr>  <chr>   <chr>  <chr>  <chr>  <chr>  <chr>  <chr>  <chr>  <chr>  <chr> 
 1 細菌   サルモ… 1      95     -      -      -      -      -      -      -     
 2 細菌   ぶどう… 1      28     -      2      22     -      -      -      -     
 3 細菌   ボツリ… -      -      -      -      -      -      -      -      -     
 4 細菌   腸炎ビ… -      -      -      -      -      -      -      -      -     
 5 細菌   腸管出… -      -      -      -      -      -      -      -      -     
 6 細菌   その他… -      -      -      -      -      -      -      -      -     
 7 細菌   ウエル… 1      10     -      2      363    -      1      37     -     
 8 細菌   セレウ… -      -      -      -      -      -      -      -      -     
 9 細菌   エルシ… -      -      -      -      -      -      -      -      -     
10 細菌   カンピ… 5      21     -      7      45     -      10     57     -     
# ℹ 14 more rows
# ℹ 27 more variables: 事件_4 <chr>, 患者_4 <chr>, 死者_4 <chr>, 事件_5 <chr>,
#   患者_5 <chr>, 死者_5 <chr>, 事件_6 <chr>, 患者_6 <chr>, 死者_6 <chr>,
#   事件_7 <chr>, 患者_7 <chr>, 死者_7 <chr>, 事件_8 <chr>, 患者_8 <chr>,
#   死者_8 <chr>, 事件_9 <chr>, 患者_9 <chr>, 死者_9 <chr>, 事件_10 <chr>,
#   患者_10 <chr>, 死者_10 <chr>, 事件_11 <chr>, 患者_11 <chr>, 死者_11 <chr>,
#   事件_12 <chr>, 患者_12 <chr>, 死者_12 <chr>

問題5:

問題4で作成した表をdataフォルダの中に、fill2.csvという名前で保存してください。そのCSVは次の練習問題で利用します。

write_csv(dat4, "data/fill2.csv")

いかがですか?

fill、それ単体では活躍しませんが、データ加工の途中で地味に役立ちそうに思いませんか?