1 前提知識

  • ここに出てくる用語は初学者にとってなじみがないものばかりかもしれないが,Rでなるべくがんばらず(人力に頼らず)にデータ加工をできるようになるためには避けて通れない
  • これ以降はここで解説した用語を説明なしに解説に使うので,分からない言葉に出くわしたらここに戻ってこよう

1.1 RStudioの使い方

1.1.1 起動画面

  • RStudioを最初に起動すると大体Figure1.1のような画面になる
RStudioの起動画面

Figure 1.1: RStudioの起動画面

1.1.2 見た目の変更

  • 好みまたは目に優しい画面にするため,RStudioの色合いを下記から変更できる
    • メニューのTools > Global Options > Appearance > Editor themeから選び,OKを押す(Figure1.2
    • 筆者はTommorow Night Brightを使用
    • 以下の説明は変更後の画面で示す
テーマの設定画面

Figure 1.2: テーマの設定画面

1.1.3 コードの実行の仕方

  • コンソールに直接コードを入力し出力を確認できる(Figure1.3
    • ちょっとした確認には便利だが,たくさん書きたい時や,内容を保存したい時は不向き
コンソールに直接

Figure 1.3: コンソールに直接

  • R Scriptに書くと,たくさん書けるし保存も簡単でおすすめ。色分けもされる
  • 慣れたらR Markdownを使うとhtmlレポートにまとめやすくなりもっと便利になる
  • Figure1.4の左上の〇で囲んである緑がついているアイコンから,またはFile > New file > R ScriptでR Scriptを開く
Rスクリプトを開く

Figure 1.4: Rスクリプトを開く

  • R Scriptを開くとデフォルトでは左上にウィンドウ(ペインと呼ばれる)が開き,ここにコードを記述できる(Figure1.5
Rスクリプトに書く

Figure 1.5: Rスクリプトに書く

1.1.4 Windowsユーザーにつきものの文字化け対策

  • Windowsだけの問題かもしれず,今後はもしかしたら不要になっていくかもしれないが,Windows10以前の場合,RStudio上で文字コードをUTF-8に指定しておく方が文字化けに悩まなくてすみそう
  • メニューのTools > Global Options > Code > Saving > Default text encodingからUTF-8選び,OKを押す(Figure1.6
  • 同様にTools > Project Options > Code Editing > Text encodingのところもUTF-8にしておく
  • 上記設定をした後で,他の環境で作られたR ScriptファイルやR Markdownファイルを開くときに文字化けする場合は,File > Reopen with EncodingからCP932(つまりShift-JIS)を選ぶとうまくいくかもしれない
文字エンコーディングの指定

Figure 1.6: 文字エンコーディングの指定

1.2 本書に出てくるコード部分の見方

  • グレーの背景部分はRのコードが書いてあり,その下の##で始まる部分は出力結果を表す
1 + 1
## [1] 2
  • ここでは1 + 1がコード部分で,## [1] 2が出力結果部分
  • [1]というのは,その次にくる値(ここでは1つしかないが)が何番目にあるかを示している
  • たとえば,1から50までの数値を出力してみる
    • コロン:で最初と最後の値をつなぐことで連番を表現できる
1:50
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
  • コード部分に#で始まる文章がある場合は,コメントを表す。ここは実行されないので説明のために書かれる
# *(アスタリスク) は掛け算であることを示す

2 * 3  # ここにもコメントを入れられる
## [1] 6

1.3 パッケージ

  • 様々な関数やデータなどがまとまっていて,読み込むと色々なことができる
    • 逆にいえば読み込まないと便利な作業ができないことが多い
  • 例えばlibrary(tidyverse)またはrequire(tidyverse) のように書くことで読み込める
  • パッケージを読み込まなくても,「パッケージ名::関数名()」でパッケージ内の関数が使える
    • どのパッケージの関数か明示するのにも便利なので,本書では多用する
    • 以下,例えば「パッケージdplyrの関数select()」はdplyr::select()と表現することがある
  • モダンなRのデータ加工に必須なパッケージをまとめて読み込んでくれるtidyverseをまず読み込んでおく
    • 以降のコードはすべてtidyverseを読み込んだ前提で進める
    • 本書では明示しない限り,すべてtidyverseを読み込めば使えるパッケージを用いている
  • インストールされているパッケージはRStudioのデフォルト画面で右下にあるウィンドウ(ペインと呼ぶ)のパッケージタブで確認可能
  • 入っていないパッケージは,インターネットにつながっていれば以下の方法でインストールできる
    • パッケージタブのinstallをクリックして出てくるウィンドウでパッケージ名を入力(Figure1.7
    • コマンドからinstall.packages("パッケージ名をここに入れる")
パッケージタブからのインストール

Figure 1.7: パッケージタブからのインストール

1.4 関数

  • データ加工においてほとんどの人は絶対お世話になるもの
    • 適切な値や変数などを指定すれば,データの処理や計算,統計解析など様々な処理を簡単に実行してくれる
    • データ加工の技術は,色々な便利関数をどの場面でどうやって使うかにつきる
  • 例えばmean()などのように「関数名()」で出てくるので,()で囲まれてる所を見たらほぼ関数だと思えばよさそう
    • 本書の2章~6章はすべて基本関数の解説
  • ()の中に入る値を引数(ひきすう)と呼ぶ
  • 引数は「,」でつないで追加していき,これによって実行したい処理のカスタマイズが可能
    • 関数の()の最初の位置に来るものを第一引数という
  • 関数の()内でtabキーを押せば,欲しいものが出てくることがある

1.4.1 関数の例

1.4.1.1 複数のものを1つにする: c()

  • ベクトルを作る(複数のものを1つにする)ための関数
    • ベクトルと聞くと数学苦手だった人はいやな記憶を思い出すかもしれないが,Rではとにかく「複数のものを1つにしたもの」と理解しておけば何となると思う
  • c()は慣れてる人は当たり前に使っているので,あまり解説されない気がするが,初学者にとってまず理解すべき最重要関数と思われる
  • ベクトルは,1.6)で解説するデータフレームでの列単位のデータを扱う際にも有用
c(1,2,3)
## [1] 1 2 3
c("a", "b", "c") # " "で囲まれる値は文字を表す
## [1] "a" "b" "c"
# 複数あるように見えるが実は1つのベクトルになっている例
1:10
##  [1]  1  2  3  4  5  6  7  8  9 10

1.4.1.2 平均値:mean()

  • 引数にベクトルを入れることで平均値を計算する
  • 1つのベクトルはデータフレームの1つの列(変数)の単位と同じなので,ここでは横に並んでいるがデータフレーム的にイメージしたら縦に並んでるとみなすと分かりやすいかも
ベクトルのイメージ

Figure 1.8: ベクトルのイメージ

mean(c(1,2,3))
## [1] 2
# 欠損値(NA)があると結果がNA
mean(c(1, NA, 3))
## [1] NA
# 引数にna.rm = TRUEを追加すると結果が出る
# 基本的に実務上は常につけておいたほうがよい
mean(c(1, NA, 3), na.rm = TRUE)
## [1] 2

1.4.2 【応用編】関数を作る

  • 一連の作業を,値を変えて繰り返したいときに役立つ
    • ここは最初は難しいかもしれないので,飛ばしても差支えないが,知っておくと3.2.15.4.1の重要知識部分や6.4の理解がしやすくなる
    • 慣れてきてもっと効率的に繰り返し作業したい気分になったら読み返すと役立つ
  • 関数名は任意で名づけることができる

1.4.2.1 基本例:x + 1でxに入る数字を変えていって結果を出力する

  • 自分で名づける関数名 <- function(引数){ 計算式やコード }」 で関数を定義できる
  • 関数の引数に数値を入れたら,その数値に1を加算する関数を作成
    • まずここでは,関数名としてadd_oneと名付けたオブジェクトを作成
    • function()の()内に,引数として入れる内容を指定する
    • {}内に処理したい式やコードを入れる
    • 作成したadd_one()関数に引数を入れて実行する
add_one <- 
  function(x){
    x + 1
  }

add_one(1)
## [1] 2
add_one(2)
## [1] 3

1.4.2.2 無名関数(anonymous function)

  • このあたりの内容は無名関数(または匿名関数)の記法でよく使われる,ラムダ式(lambda expression)と呼ばれることもある
  • 関数名を定義しなくても実行できる。{}がなくても動く
    • 他の関数の中で(例:across(); 5.4.1参照)使われる際は不要だが,ここだけで実行する場合はfunction() x + 1部分を()で囲む必要がある
  • 右端の部分の()に引数を入れることで実行できる
(function(x) x+1)(1)
## [1] 2
(function(x) x+1)(2)
## [1] 3
  • R 4.1.0より,functionを省略してバックスラッシュ\で示せるようになった
  • purrr 1.0.0では,従来の~.xを使った記法から,無名関数の\(x)xを使う書き方に移行した(参考:purrr 1.0.0 Docmentation
    • これにより,本書で中心的に扱う繰り返し作業の記法もこれに対応する
(\(x) x+1)(1)
## [1] 2

1.5 オブジェクト

  • Pythonなどの他言語では変数3と呼ばれるものに該当
  • 計算の結果や,複数の数値や文字など(他にも色々)を1つの文字列に格納することができ,その後のコードで活用できる
  • <-の矢印の先にあるのがオブジェクト。RStudioではショートカットalt + -で出せる(MacはOption + -)
  • この後説明するデータフレームもオブジェクトに入れられる
    • データの少ないミニデータを作る時や,計算結果を格納するときに多用

1.5.1

res <- 1 + 1
res
## [1] 2
res2 <- c(1, 2:4, 5)
res2
## [1] 1 2 3 4 5
res3 <- c("a", "b")
res3
## [1] "a" "b"
# この後は不要なので削除
rm(res, res2, res3)

1.6 データフレーム

  • (別名:ケース;オブザベーション;レコード)と(別名:変数;カラム)4が碁盤の目のようになった集まりの形のデータ
    • Excelで表現するのであれば通常1行目に列名が入り、2行目以降が個別のケース(データ)を表す形(Figure1.9)。Rのデータフレームでは列名は別途与えられ,1行目からケースが表される(Figure1.10
  • データ解析において便利で分かりやすいため、本書ではデータフレームの形で説明していく
    • Rのモダンな方法では,データの加工や統計処理のプロセスをデータフレームの形で返すことが多い
  • 解析すべきデータがデータフレーム上に整えられているような状態をtidy(読み:タイディー,意味:整然)と呼び,データ解析において理想的な形とされている
Excel画面風なイメージ

Figure 1.9: Excel画面風なイメージ

Rのデータフレーム(tibble形式)

Figure 1.10: Rのデータフレーム(tibble形式)

  • オブジェクトに格納することで,別のデータフレームを作れる
  • 列単位で取り出すとベクトルになる
    • 例:bill_length_mmは次のようなベクトルで表現できる c(39.1, 39.5, 40.3, NA …)
  • 本書では,データフレームの中でも表示に便利なtibble形式を使う
    • デフォルトでは最初の10行が表示されるが,本書では紙面の都合上,表示行数をしぼっている

1.6.1 本書で使う主なデータ例

1.6.1.1 ペンギンデータ

  • palmerpenguinsパッケージのpenguinsデータ(CC0)
    • 最初からtibble形式になっている
  • データフレーム名を打ち込めばそのまま表示できる
    • tibble形式でないデータフレームで大きなものに対して実行すると,Consoleの出力がうまって大変になることもある
# パッケージが入ってなければ下記実行
# install.packages("palmerpenguins")

palmerpenguins::penguins
## # A tibble: 344 × 8
##   species island   bill_length_mm bill_depth_mm flipper_length_mm
##   <fct>   <fct>             <dbl>         <dbl>             <int>
## 1 Adelie  Torgers…           39.1          18.7               181
## 2 Adelie  Torgers…           39.5          17.4               186
## 3 Adelie  Torgers…           40.3          18                 195
## # ℹ 341 more rows
## # ℹ 3 more variables: body_mass_g <int>, sex <fct>, year <int>
  • tibble形式のデータフレームの出力の見方
    • 出力の最上段にあるA tibble: 344 x 8で,tibble形式のデータフレーム,344行 × 8列という情報が分かる
    • 変数名の下の行にある<fct>, <dbl>, <int>は変数の型を示し,それぞれ因子型,数値型,整数型であることを示している。詳しくは5.3で説明する
  • より大きいデータフレームで情報が多い場合の出力例を次に示す
palmerpenguins::penguins_raw
## # A tibble: 344 × 17
##   studyName `Sample Number` Species           Region Island Stage
##   <chr>               <dbl> <chr>             <chr>  <chr>  <chr>
## 1 PAL0708                 1 Adelie Penguin (… Anvers Torge… Adul…
## 2 PAL0708                 2 Adelie Penguin (… Anvers Torge… Adul…
## 3 PAL0708                 3 Adelie Penguin (… Anvers Torge… Adul…
## # ℹ 341 more rows
## # ℹ 11 more variables: `Individual ID` <chr>,
## #   `Clutch Completion` <chr>, `Date Egg` <date>,
## #   `Culmen Length (mm)` <dbl>, `Culmen Depth (mm)` <dbl>,
## #   `Flipper Length (mm)` <dbl>, `Body Mass (g)` <dbl>,
## #   Sex <chr>, `Delta 15 N (o/oo)` <dbl>,
## #   `Delta 13 C (o/oo)` <dbl>, Comments <chr>
  • tibble形式のデータフレームの出力の見方

    • Indiv…² のように,長い変数名はと数字で省略して表示され,フルネームは脚注に数字に対応させて表示される
    • データフレーム下の1行目にある … with 341 more rows, 9 more variables: で,さらに341行と9列が非表示であることが分かる
    • 非表示になった変数名は Date Egg <date>, Culmen Length (mm) <dbl> のように最下部に表示される
  • 本書では最初の3行の表示のみに絞っているが,出力されるデータフレームの実行結果はデフォルトで10行表示される。任意の行数を表示させたい場合は,print()関数を使う

  • 例:最初の15行のみ表示させる

palmerpenguins::penguins  |>  
  print(n = 15)
## # A tibble: 344 × 8
##    species island  bill_length_mm bill_depth_mm flipper_length_mm
##    <fct>   <fct>            <dbl>         <dbl>             <int>
##  1 Adelie  Torger…           39.1          18.7               181
##  2 Adelie  Torger…           39.5          17.4               186
##  3 Adelie  Torger…           40.3          18                 195
##  4 Adelie  Torger…           NA            NA                  NA
##  5 Adelie  Torger…           36.7          19.3               193
##  6 Adelie  Torger…           39.3          20.6               190
##  7 Adelie  Torger…           38.9          17.8               181
##  8 Adelie  Torger…           39.2          19.6               195
##  9 Adelie  Torger…           34.1          18.1               193
## 10 Adelie  Torger…           42            20.2               190
## 11 Adelie  Torger…           37.8          17.1               186
## 12 Adelie  Torger…           37.8          17.3               180
## 13 Adelie  Torger…           41.1          17.6               182
## 14 Adelie  Torger…           38.6          21.2               191
## 15 Adelie  Torger…           34.6          21.1               198
## # ℹ 329 more rows
## # ℹ 3 more variables: body_mass_g <int>, sex <fct>, year <int>

1.7 |>または%>%(パイプ演算子)

  • 名前はパイプで発音は”and then” (参照
  • コードを読みやすくするための便利な機能を持つ演算子。初めてみた人は全然わからないと思うが,この本を読んでコードを書きはじめてみたらこれなしではいられなくなるくらいお世話になると思う
    • 主に使用が想定される場面でざっくりいうと,「このデータフレームに対して|>の後にある関数を適用する」という機能
    • 具体的な使用法は2.2.1で解説
    • 最近は特にパッケージを読み込まなくても使える|>(base pipe, native pipe)を使う説明が多くなった。
      • %>%(magrittr pipe)はtidyverseパッケージを読み込めば使えて,こちらが必要になる特殊なケースもある
  • RStudioのショートカットはCtrl + Shift + M(MacはCmd + Shift + M)。たぶん,RStudio以外でもこのショートカット押してしまうぐらい中毒性がある
    • 現時点ではRStudioのデフォルトのショートカットで出るのは%>%だが,|>に切り替えたい場合は,RStudioのTools > Global Options > Code > Editing > use native pipe operatorにチェックを入れる

1.8 プロジェクト

  • 本書の内容では使わなくても問題ないが,自身のデータを読み書きする際には非常に便利なので,解説しておく
  • データを加工して解析する際に、1つのフォルダ(サブフォルダも含む)の中に関連するデータやコードなどをまとめておき、そのフォルダをプロジェクトと設定する
    • これにより、ファイルの読み書きの際の場所指定をいちいち意識しないで作業できるようになる
  • RStudio画面の右上にProject設定のメニューがある(Figure1.11
    • Project (None) > New Project > Existing Directoryと選び,プロジェクトにしたいフォルダを設定する
プロジェクトの設定

Figure 1.11: プロジェクトの設定

1.9 困ったときは

  • 関数の使い方,引数の入れ方は大抵忘れるので,ヘルプのexampleを見て思い出す場合が多い
    • コンソールに「?関数名」のように入れて実行する(例:?rename)と右下ペインのHelpタブに情報が出てくる
    • 右下ペインのHelpタブで検索する(Figure1.12
  • チートシートを見る
    • メニューのHelp > Cheat Sheets > Browse Cheat Sheetsから掲載サイトに行ける
  • エラーメッセージを" "で囲んでググる(フレーズ検索)
  • r-wakalang#r_beginnersチャンネルで質問する
ヘルプの確認

Figure 1.12: ヘルプの確認