%>%
linelist group_by(hospital) %>% # 病院ごとのグループの列
slice_max(date, n = 1, with_ties = F) # 日付が同じ場合は最初の行を採用する
1 編集前記・技術注記
本章では、このハンドブックの制作におけるアプローチの哲学、スタイル、具体的な編集上の留意項目について説明します。
1.1 アプローチとスタイル
本書の潜在的な読者層は広いと考えています。R を初めて使う人はもちろん、より良い R の使い方やそのヒントを探している経験豊富な R ユーザーにもきっと役立ててもらえるはずです。そのため、本書は理解しやすく、簡潔である必要があり、R に慣れていない人でもコードを適用し、コードが何をしているのかをたどることができるよう、十分な説明を行うことを心がけました。
その他のポイント
- 本書は、比較的簡単な事例を用いたコードの参考書であり、R やデータサイエンスの完全な教科書ではありません。
- 本書は、応用疫学で R を使用するためのハンドブックであり、応用疫学の手法や科学に関するマニュアルではありません。
- それぞれのタスクに最適な R のパッケージは頻繁に変わるため、このハンドブックでどのパッケージの使用を重視するかに関する議論を歓迎します。
R パッケージ
多くの選択肢
R の学習で最も難しいことの 1 つは、特定のタスクに対してどの R パッケージを使うべきかを把握することです。あるタスクで悪戦苦闘しているうちに、「あれ、1 つのコマンドで全部やってくれる R パッケージがあるじゃないか!」と気づくことはよくあります。
このハンドブックでは、各タスクを完了するために少なくとも 2 つの方法を用いるようにしています。1 つは試行錯誤を重ねた方法(おそらくbase R か tidyverse パッケージ)、もう 1 つはその目的のためにカスタマイズされた特別な R パッケージを使用する方法です。パッケージがダウンロードできない、あるいはうまく動作しない場合に備えて、いくつかの選択肢を用意しておきたいと思います。
使用するパッケージの選択にあたっては、一般的な利用者によってテストされ吟味されたもの、典型的な作業内で使用するパッケージの数が最小であるもの、安定しているもの(あまり頻繁に変更されない)、そしてシンプルかつ簡単にタスクを達成するパッケージと手法を優先的に選びました。
このハンドブックでは、一般的に tidyverse の R パッケージや関数を優先的に紹介します。tidyverse はデータサイエンスのために設計された複数の R パッケージを集めたものであり、含まれているパッケージは、基礎となる文法やデータ構造を共有しています。すべての tidyverse パッケージは、tidyverse パッケージを介してインストールまたは読み込むことが可能です。詳しくは tidyverse のウェブサイトをご覧ください。
また、本書の読者の中には、追加のパッケージをダウンロードするための信頼できるインターネット環境を利用できない方がいることを想定し、必要に応じて base R(R をインストールしたときに付属しているパッケージや関数)を用いた手法も紹介しています。
関数とパッケージの明示的な関連付け
R のチュートリアルで関数がコードで表示されても、それがどのパッケージのものかわからないとイライラすることがよくありますね! 私たちはこのような状況を避けようとしています。
本書では、説明する際にパッケージ名は太字で書き(例:dplyr)、関数は次のように書いています: mutate()
。また、関数がどのパッケージから来たものかを明示するために、文章内でパッケージを参照するか、dplyr::mutate()
のようにコード内でパッケージを明示するようにしています。冗長に見えるかもしれませんが、あえてそのように書いています。
パッケージや関数について詳しく知りたい方は、Rの基礎 の章をご覧ください。
コードのスタイル
このハンドブックでは、以下の理由に基づき、頻繁に「改行」をいれて、コードを「縦長」に表示しています。
- コードの細かい点について、コードのすぐ隣で
#
を使って説明コメントを書くことができる - 一般的に、長い(縦長の)コードの方が読みやすい
- 狭い画面でも読みやすい(横スクロールが必要ない)
- インデントにより、どの引数がどの関数に属しているかがわかりやすい
以下に例を挙げます。
本書のスタイルに従うと、上のコードは、次のように書きます。
%>%
linelist group_by(hospital) %>% # 病院ごとのグループの列
slice_max(
# グループごとに日付の最大値を持つ行を保持する
date, n = 1, # 最も上段の 1 列を保持する
with_ties = F) # 日付が同じ場合は最初の行を採用する
R コードは通常、改行やインデントの影響を受けません。コードを書く際は、カンマの後で改行すると、自動的なインデントが適用されます。
また、スペースをたくさん使っている理由は、その方が読みやすいからです(例えば、n=1
ではなく n = 1
)。読み手に親切なコードを書きましょう!
用語解説
このハンドブックでは、一般的に「変数(variables)」や「観測値(observations)」ではなく「列(columns)」や「行(rows)」といった用語を使用します。この 「tidy data(データの前処理)」 の入門書で説明されているように、ほとんどの疫学統計データセットは、行(rows)、列(columns)、値(values)の構造で構成されています。
変数には、同じ基本属性(年齢層、転帰、発症日など)を測定した値が含まれます。観測値には、同じ単位(人、部位、実験試料など)で測定されたすべての値が含まれます。したがって、列や行と比較して、これらを具体的に定義することは困難であるでしょう。
「整理された」データセットでは、各列が変数、各行が観測値、各セルが 1 つの値です。しかし、あなたが扱うデータセットの中には、この型に当てはまらないものもあります。例えば、「横長」形式のデータセットでは、変数が複数の列にまたがっていることがあります(データの縦横変換 の章で例をご覧ください)。同様に、観測値も複数の行にまたがって分割されていることもあります。
このハンドブックの大部分は、データの管理と変換に関するものなので、抽象的な観測値や変数よりも、行や列といったより具体的なデータ構造に言及する方が適切です。例外は主にデータ解析の章で生じ、そこでは変数や観測値への言及が多くなります。
注釈
ここでは、このハンドブックで書かれている注釈の種類を紹介します。
注釈:これは注釈です
ヒント:これはヒントです
注意:これは注意事項です
警告:これは警告です
1.2 編集上の決定事項
以下では、パッケージや関数の選択に関して、編集上の重要な決定事項を記載しています。これらについて異なる意見がある場合や、新しいツールをご提供いただける場合は、こちらの Github ページに参加しメッセージをお送りください。
パッケージ、関数、その他の編集上の決定事項の表
項目 | 候補パッケージ・関数 | 推奨パッケージ・関数 | 簡単な説明 |
---|---|---|---|
一般的なコーディング方法 | tidyverse, data.table, base | tidyverse、data.table 関連の章で使用される。インターネットを持たない読者のための代替方法としては base を推奨 | tidyverse 読みやすいコードや一般性の高いコードの作成のために使用される(一番教えられているパッケージ |
パッケージの読み込み |
library() ,install.packages() , require() , pacman
|
pacman | ほとんどのパッケージのインストールと読み込みにおいて、コードの短縮と簡素化を実現する |
インポートとエクスポート | rio, 他にも多数存在 | rio | 多くのファイルタイプに対応する手軽さ |
要約統計のためのグループ化 |
dplyr group_by() , stats aggregate()
|
dplyr group_by()
|
tidyverse と同様に重要 |
縦横変換 | tidyr (pivot 系関数), reshape2 (melt/cast), tidyr (spread/gather) | tidyr (pivot 系関数) | reshape2 は廃止され、tidyr は 1.0.0 版から pivot 系関数を使用 |
列名のクリーニング | linelist, janitor | janitor | パッケージの集約を重視 |
時間データの取り扱い | lubridate, aweek, tsibble, zoo | lubridate 一般的なものと、特定のケースに対応するものとがある | lubridate の柔軟性、一貫性、パッケージ維持の見通し |
ggplot ラベル |
labs() , ggtitle() /ylab() /xlab()
|
labs() |
すべてのラベルを一箇所でシンプルに修正 |
因子型への変換 |
factor() , forcats
|
forcats | さまざまな関数も同じコマンドで因子に変換 |
流行曲線(エピカーブ) | incidence, ggplot2, EpiCurve | incidence2 を素早く、ggplot2 を詳細に | 信頼性 |
結合処理 |
paste() , paste0() , str_glue() , glue()
|
str_glue() |
stringr 内にあり paste 関数よりもシンプルな構文 |
1.3 主な修正履歴
日付 | 主な変更点 |
---|---|
2021 年 5 月 10 日 | 1.0.0 版の公開 |
2022 年11 月 20 日 | 1.0.1 版の公開 |
更新情報 1.0.1 版は以下の変更が適用されています。
- R のバージョンを 4.2 に更新しました
- データクリーニングと主要関数 : {linelist} パッケージから {matchmaker} パッケージへの変更、
case_when()
の例示コードから不溶な行を削除 - 日付型データ : {linelist} パッケージの関数
guess_date()
から {parsedate} パッケージの関数parse_date()
への変更 - データの縦横変換 :
pivot_wider()
のid_cols=
引数の小変更 - 標本調査データ分析 :
plot_age_pyramid()
からage_pyramid()
への変更、サンキー図(沖積図)をプロットするコードの小変更 - ヒートマップ :
agg_weeks
オブジェクト生成コードにungroup()
を追加 - 動的な図の作成 :
agg_weeks
オブジェクト作成時にtidyr::expand()
が意図通りに機能するためにungroup()
を追加 - 時系列分析とアウトブレイクの検出 : すべての
trending::fit()
とpredict()
内のオブジェクトに対してdata.frame()
を追加 - 複数回答データの分析 :
case_when()
からifelse()
への変更、データオブジェクト作成時にacross()
引数を追加 - 感染連鎖 : より新しいバージョンの {epicontacts} パッケージを利用するように変更
1.4 バージョン情報 (R・RStudio・パッケージ)
このハンドブックで使用した R、RStudio、R パッケージのバージョンに関する情報を以下に示します。
::session_info() sessioninfo
─ Session info ───────────────────────────────────────────────────────────────
setting value
version R version 4.3.2 (2023-10-31 ucrt)
os Windows 11 x64 (build 22621)
system x86_64, mingw32
ui RTerm
language (EN)
collate English_United States.utf8
ctype English_United States.utf8
tz Asia/Bangkok
date 2024-09-18
pandoc 3.2.1 @ C:/PROGRA~1/Pandoc/ (via rmarkdown)
─ Packages ───────────────────────────────────────────────────────────────────
package * version date (UTC) lib source
cli 3.6.3 2024-06-21 [1] CRAN (R 4.3.3)
digest 0.6.35 2024-03-11 [1] CRAN (R 4.3.3)
evaluate 0.24.0 2024-06-10 [1] CRAN (R 4.3.3)
fastmap 1.2.0 2024-05-15 [1] CRAN (R 4.3.3)
htmltools 0.5.8 2024-03-25 [1] CRAN (R 4.3.3)
htmlwidgets 1.6.4 2023-12-06 [2] CRAN (R 4.3.2)
jsonlite 1.8.8 2023-12-04 [1] CRAN (R 4.3.3)
knitr 1.48 2024-07-07 [1] CRAN (R 4.3.3)
rlang 1.1.4 2024-06-04 [1] CRAN (R 4.3.3)
rmarkdown 2.28 2024-08-17 [1] CRAN (R 4.3.3)
sessioninfo 1.2.2 2021-12-06 [2] CRAN (R 4.3.2)
xfun 0.46 2024-07-18 [1] CRAN (R 4.3.3)
[1] C:/Users/ngulu864/AppData/Local/R/win-library/4.3
[2] C:/Program Files/R/R-4.3.2/library
──────────────────────────────────────────────────────────────────────────────