この練習問題では、厚生労働省の令和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ファイルをインポートしてください。
── 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という名前に変更されています。
問題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、それ単体では活躍しませんが、データ加工の途中で地味に役立ちそうに思いませんか?