R初心者の館(RとRStudioのインストール、初期設定、基本的な記法など)

本記事について

R Advent Calendar 2019 2日目の記事です。

本記事執筆のモチベーション

ゼミや講義でRを使いたいことがあります。しかし、インストールや初期設定、基本的な記法についての説明で時間を使ってしまうのはもったいないと思い、「これを事前に読んできて」と言えば済むような資料を用意したいと思いました(もちろんすでに、ネット上には有用な記事がたくさんあります)。もし同様の要望をお持ちの方がいらっしゃったら、本記事をご活用いただければ幸いです。  

そういうわけで、本記事では、Rをまったく触ったことがない初心者を読者に想定しています。また、筆者の環境がWindowsであるため、同環境を事例として説明しています。

目次

RとRStudioのインストール

Rとは

公式ページの説明の通り、Rはフリーの、オープンソースプログラミング言語で、様々な環境上で動きます(Linux系、WindowsMacOS)。統計解析や作図に強い点が特徴です。

Rのデフォルトの機能だけでも相当のことができますが、Rはパッケージ(package)を活用することで、どんどんその機能を拡張することが出来ます。

ピカチュウでんきタイプポケモンなので、レベルアップに伴い、基本的にはでんき系の技を中心に覚えていきます。「でんじは」とか「かみなり」とか。 しかし、わざマシンを使うと、ピカチュウがその技を使用できるようになります。例えば「ねむる」のわざマシンを使うと、自力では覚えないはずの「ねむる」を使用可能になります。

パッケージはこのように、本来備わっていない機能を、後から追加するための道具と考えてください。詳しい説明は後述します。

 

Rのインストール

Rにまつわるエトセトラは、CRAN(しーらん:Comprehensive R Archive Network)からダウンロードします。日本では、以下のいずれかのミラーサイトからダウンロードするとよいでしょう。

自分の環境(Linux、MaxOS、Windows)に適したリンクを選択し...

f:id:das_Kino:20191105131701p:plain

install R for the first time」をクリックしましょう(下図の反転している部分)。最新バージョンのRをダウンロードするための画面に移動します。「Download~」をクリックするとインストーラーがダウンロードされます。

f:id:das_Kino:20191105131824p:plain

f:id:das_Kino:20191105140912p:plain

インストーラーを起動したら、「OK」と「次へ」ボタンだけを押しましょう。他の設定は一切変更しないでください。

※もし変更する場合は、インストール場所に注意してください。過去に、「パスに日本語が含まれる場所」にインストールしたり(例:C:/Users/hogehoge/Documents/分析)、同期しているクラウドストレージ(onedrive等)上にインストールしたりしたりしたため、トラブった例がありました。

f:id:das_Kino:20191105142157p:plain

これでRがインストールできました。このままRを立ち上げて操作してもいいのですが、RStudio経由でRを操作したほうが圧倒的に便利です。そこで次節ではRStudioのインストール方法を説明します。  

RStudioとは

RStudioは、Rをより使いやすくするための統合開発環境IDE)です。よく、「RStudioがあれば、Rは不要ですか?」と聞かれることがありますが、そうではありません。Rを直接操作するのではなく、RStudio経由でRを操作するわけなので、RもRStudioもそれぞれインストールする必要があります。

RStudioのインストール

ローカル環境にインストールして使用するRStudio Desktopと、サーバ上でRStudioを操作するRStudio Serverがありますが、ここではRStudio Desktopの利用方法を説明します。

RStudioの公式サイトから、最新版のRStudioインストーラーをダウンロードしてください。Installers for Supported Platformsの中から、各自の環境に合ったインストーラーを選んでください。

f:id:das_Kino:20191105151834p:plain

インストーラーを起動したら、「次へ」と「インストール」ボタンだけを押しましょう。他の設定は一切変更しないでください。

※もし変更する場合は、インストール場所に注意してください。過去に、「パスに日本語が含まれる場所」にインストールしたり(例:C:/Users/hogehoge/Documents/分析)、同期しているクラウドストレージ(onedrive等)上にインストールしたりしたりしたため、トラブった例がありました。

これでRStudioのインストールも完了です。RStudio経由でRを操作できるようになったので、以後はRStudioだけを起動させればよいです。Windowsの場合はスタートメニューから探してください。

f:id:das_Kino:20191105152520p:plain

RStudioの初期設定

次は、RStudioを本格的に使い始める前の初期設定を整えます。以後の初期設定はすべて、Tools → Global Options... の中で行います。

f:id:das_Kino:20191105152845p:plain

デフォルトの作業ディレクトリ(Working Directory)の設定

通常、ファイルを参照する際に、「Cドライブの中の、R_practiceというフォルダの中の、practice_1.csvという名前のファイル(C:/R_practice/practice_1.csv)」というようにファイルが置かれた場所を絶対パスで正確に指定する必要があります。いわば、郵便を送るときに、「東京都港区~~丁目の・・・さん」のように住所を書くようなものです。これは結構めんどくさいです。

しかし、作業ディレクトリを設定しておけば、その作業ディレクトリを起点とした相対パスを書けば済みます。例えば作業ディレクトリが「Cドライブの中の、R_practiceというフォルダ」であれば、いきなり「practice_1.csv」というファイル名を指定するだけで、そのファイルを特定することができます。

RStudioには「プロジェクト」という機能があり、目的ごとに作業ディレクトリを設定することができます。しかしプロジェクトが指定されていない時は、デフォルトの作業ディレクトリが適用されます。プロジェクトについては今回は説明を省略しますが、本格的にRを使うようになると必須の機能なので、その時に改めて調べてみてください。

Browse...ボタンを押して、任意のフォルダを作業ディレクトリに設定しましょう。ここではCドライブ内に「R_practice」というフォルダを新しく作り、そこをデフォルトの作業ディレクトリに指定しました。

作業ディレクトリは任意の場所で構いませんが、なるべくパスに日本語が入らないようにしたほうが安心です。次に説明するように、文字化けしたら困るので。

f:id:das_Kino:20191105154238p:plain    

文字コードの設定

プログラム内に、日本語でコメントを書き入れることがあると思います。しかし日本語のようにマルチバイト文字を使用する場合、文字コードによっては文字化けが生じる恐れがあります。そこでまず文字コードを設定してしまいましょう。

左側のカラムから「Code」、上部のタブから「Saving」を選び、以下の画面を開きます。Change...ボタンを押すことで、任意の文字コードを指定できます。ここではUTF-8を選びましょう。

f:id:das_Kino:20191105154736p:plain

”見栄え”の設定

次は好みの問題ですが、好きな見栄えを選びましょう。例えばフォントサイズを変更することが出来ます。

また、RStudio上でRコードを書いた場合は、予約語やコメントに色が付いてハイライトされます。その色のパターンを、Editor themeの中から選ぶことが出来ます。

f:id:das_Kino:20191105155118p:plain

 

パッケージをダウンロードするCRANリポジトリの設定

先述のように、Rは次々にパッケージをインストールしていくことによって、その機能を拡張していくことが出来ます。パッケージは、世界中に存在するCRANリポジトリからインターネット経由でダウンロード&インストールすることが出来ます。その都度リポジトリを選ぶことも出来ますが、ここで設定したほうが楽です。

Change...ボタンを押すとリポジトリを変更可能です。日本国内では、以下の機関がCRANリポジトリを管理しているので、いずれかを選ぶと良いでしょう。

f:id:das_Kino:20191105155539p:plain

他にも細かい設定を行うことが可能ですが、最低限、以上の設定が終わればよいでしょう。

 

RStudioの機能

一度RStudioを閉じて、もう一度立ち上げなおしてください。下図の赤枠で囲ったところに、先ほど設定した作業ディレクトリが表示されていることがわかります。

f:id:das_Kino:20191105160832p:plain

さて、RStudioは上図のように、4つの領域に役割分担されています。それぞれの領域を、ペイン(Pane)と呼びます。各ペインの配置場所は変更可能ですが、ここではデフォルトの配置を前提として説明していきます。  

Sourceペイン(左上)

いわゆる、スクリプトを書くところです。実はRStudioは、RもPythonもStanも...様々なプログラミング言語のコードエディタとして機能します。どのような言語であろうと、このSourceペインでスクリプトを書きます。演劇でいうところの、台本だと思ってください。

Sourceペインでは、スクリプトをただ書くだけではなく、任意のコードを即座に実行することが出来ます。実行結果は、次に説明するConsoleペインに表示されます。

コードを実行するためには、以下の操作を実行してください。MacではCtrlではなくCmdキーを使用します。

  • 任意の行のコードを実行したい
    • その行にカーソルを移動させて、Ctrl + Enter
  • 複数行を同時に実行したい
    • 複数行を選択したうえでCtrl + Enter
  • あるファイル内の全ての行を実行したい
    • Ctrl + Shift + Enter

Consoleペイン(左下)

上図を見るとわかるように、Sourceペインと同じコードと、その実行結果が表示されていますね。演劇でいうところの、舞台だと思ってください。

実はConsole上に直接コードを入力し、実行することも出来ます。いわば、台本にない台詞をアドリブで舞台上で披露するようなものです。しかし、分析結果の再現・再生可能性を高めるために、後で参照する可能性があるコードは全て、Sourceペインに記入したほうがよいでしょう。

Environmentペイン、Historyペイン(右上)

これらはタブでペインを切り替えます。Environmentペインには、作成したオブジェクトの一覧が表示されます。

例えば上図では、

  • a <- 5
  • b <- 3

により、aというオブジェクトに5を、bというオブジェクトに3を代入しています(後述しますが、Rでは代入演算子として、矢印を示す<-を使用します)。どのオブジェクトが作成されたか、それにはどのようなデータが入っているかを、Environmentペインで確認できるというわけです。

Historyペインでは、過去に実行したコマンドの履歴が確認できます。

Filesペイン、Plotsペイン、Packagesペイン、Helpペイン、Viewerペイン(右下)

やはりこれらもタブで切り替えます。

  • Filesペイン
    • 作業ディレクトリ内のファイル一覧が表示されます。ここから任意のファイルを開くことも可能です。
  • Plotsペイン
    • 作図結果がここに表示されます。
  • Packagesペイン
    • 新しいパッケージを追加したい場合に、ここから選びます。また、すでにインストールされているパッケージを確認することもできます。
  • Helpペイン
    • 関数やパッケージ等についてのサポート情報を確認することが出来ます。
  • Viewerペイン
    • ちょっと特殊な出力(例えばJavaScriptベースのグラフ)が表示されます。  

Rの基本的な記法・使用方法

ではいよいよ、コードを書いていきましょう。左上のアイコンを押して、新規ファイルを立ち上げます。ここではRのコードを書いていくので、一番上の「R Script」を選びましょう。このファイルの拡張子は「.R」になります。

f:id:das_Kino:20191105163016p:plain

四則演算

以下のの演算子を用いることで、四則演算が可能です。割り算の余りを返したい場合の演算子%%です。

※注意:以後、Consoleペイン上に表示される結果を表示しています。実際のコードでは冒頭に「>」を入力する必要はありません。
Rでは、「#」以後に書かれたものはコメントアウトされます。つまり、「#」以後に書いたものは、プログラムのコードとは認識されないため、様々なメモを残すことが可能ということです。

> 5 + 3   #足し算
[1] 8

> 5 - 3   #引き算
[1] 2

> 5 * 3   #掛け算
[1] 15

> 5 / 3   #割り算
[1] 1.666667

> 5 %% 3  #割り算の余り
[1] 2

代入演算子

先述のように、Rにおける代入演算子は、矢印を表す<-です(半角の「<」の後に、半角の「-」を続けて打つ)。この代入演算子の面白いところは、->のように左右反転させても機能することです。この場合、->の左側の情報が右側のオブジェクトの中に代入されます(もっとも、この用法はあまりおすすめはしません)。
代入演算子<-は、Alt + =でショートカット入力させることもできます(+は入力する必要ありません)。

多くのプログラミング言語では、代入演算子=ですが、Rでも使用可能です。現在のRではどちらの演算子を用いてもほぼ問題ありません。ごく稀に、<-でしか機能しない状況が存在するため、そういう意味では常に<-を使用したほうが汎用的ではあります。

> a <- 5    #aに5を代入
> a  #aの中身を表示
[1] 5
 
> b = 3     #bに3を代入
> b  #bの中身を表示
[1] 3
 
> 7 -> c    #cに7を代入
> c  #cの中身を表示
[1] 7

なお筆者はここ数年、代入演算子=を用いています。Rを教える際に、他の言語(C、Python...)をすでに学んでいる/これから学ぶ学生が混乱しないように配慮していたのですが、いつの間にか筆者自身が=に慣れてしまいました。しかし特に困ったことはありません。

その他の演算子

Rには非常に多くの演算子があり、すべてをいきなり理解するのは難しいので、徐々に覚えていけばいいと思います。より高度な演算子は、以下のサイトを参考にしてください。

Rの演算子特集  

データの型・構造

とてもとてもとてもとても大事なところです。ただし、ここをちゃんと説明しようと思ったらかなり大変なので、参考となるサイトを紹介するにとどめます。ぜひ以下のリンク先を熟読してください。英語のサイトですが、非常に端的にまとまっています。ここを読むのがおすすめです。

日本語で書かれたサイトでは、以下の記事が参考になります。

ベクトルの作成

上記のサイトにも書かれている内容のうち、重要な内容を一部抜粋して説明します。まずはベクトルの作成についてです。

ここではベクトルとは、「複数の情報が並んだもの」くらいの理解で大丈夫です。例えばトランプから無作為に5枚のカードを抜き取ったところ、数字は順に「3, 1, 2, 5, 8」だったとしましょう。これもベクトルです。

Rでは関数c()によってベクトルを作成します。要素をカンマで区切って並べます。文字列を要素とする場合は、引用符("")で囲う必要がある点に注意です。

> v1 <- c(3, 1, 2, 5, 8)
> v1
[1] 3 1 2 5 8

> v2 <- c("abc", "あいう", "123", "春", "-----")
> v2
[1] "abc"  "あいう"  "123"  "春"  "-----" 

ベクトル内の要素にアクセス

あるベクトルの中の、n番目の要素にアクセスするときは、以下のように書きます。

> #1番目(最初)の要素を表示
> v1[1]
[1] 3

> # length()でベクトルの要素数を取得
> # 取得した要素数をインデックスにすることで、最後の要素を表示
> v1[length(v1)]
[1] 8

ベクトル名の直後に[]を書いて、その中に数字を入力することで、対応する要素にアクセスすることが出来ます。多くのプログラミング言語では、インデックスは0から始まると思いますが(最初の要素はv1[0]、2番目の要素はv1[1])、Rでは1から始まることに注意が必要です。

matrixの作成

ベクトルが縦、あるいは横にずらっと並んだものが行列(matrix)のイメージです。例えば上で作成した2つのベクトル、v1v2縦方向に並べてみると...

#rbind()はベクトルを「縦方向」に連結する関数
#各ベクトルは左から右に向かってデータが並ぶ、すなわち「行(row)」になるので、頭文字r
> m1 <- rbind(v1, v2)
> m1
   [,1]  [,2]     [,3]  [,4] [,5]   
v1 "3"   "1"      "2"   "5"  "8"    
v2 "abc" "あいう" "123" "春" "-----"

横方向に並べてみると...

#cbind()はベクトルを「横方向」に連結する関数
#各ベクトルは上から下に向かってデータが並ぶ、すなわち「列(column)」になるので、頭文字c
> m2 <- cbind(v1, v2)  
> m2
     v1  v2      
[1,] "3" "abc"   
[2,] "1" "あいう"
[3,] "2" "123"   
[4,] "5" "春"    
[5,] "8" "-----" 

いずれの場合も、個々のベクトルの行数、または列数が等しくないと連結できないことに注意してください。

> m3 <- cbind(c(1, 2, 3),
              c(4, 5, 6, 7, 8)
              )
 警告メッセージ: 
 cbind(c(1, 2, 3), c(4, 5, 6, 7, 8)): 
  number of rows of result is not a multiple of vector length (arg 1)

matrixの要素にアクセスする

matrixには行と列が存在するため、ある要素にアクセスしたい場合には、行番号と列番号をそれぞれ指定する必要があります。例えば上で作成した、m2というmatrixから「春」というデータを参照したい場合には、以下のように書きます。[行番号, 列番号]という順番であることに注意してください。

> m2[4, 2]
  v2 
"春"

また、特定の行番号だけ、あるいは特定の列番号だけを指定すれば、該当するベクトルを参照することも出来ます。

> # 2行目だけ取得。カンマの右側が空白であることに注意
> m2[2,]
      v1       v2 
     "1" "あいう" 

> # 1列目だけ取得。カンマの左側が空白であることに注意
> m2[,1]
[1] "3" "1" "2" "5" "8"

さらに、c()によって複数の行番号や列番号を指定することもできます。

> # 3行目と5行目だけを取得 
> m2[c(3, 5),]
     v1  v2     
[1,] "2" "123"  
[2,] "8" "-----"

data.frameの作成

matrixは、複数のベクトルが縦方向または横方向にずらっと並び、長方形の形になったものですが、Rでは同じ形をしているデータフレーム(data.frame)というクラスもあります。Rでは、データをdata.frameクラスにしたうえで扱うことが多いです

data.frame()関数に複数のベクトルを与えると、data.frameを作成することが出来ます。

> df1 <- data.frame(v1,
                    v2 = c("a", "b", "c", "d", "e"),
                    v3 = 10:14) #c(10, 11, 12, 13, 14)に等しい

> df1
  v1 v2 v3
1  3  a 10
2  1  b 11
3  2  c 12
4  5  d 13
5  8  e 14

ここで、ベクトルv1はすでに作成していたものを利用しています。v2v3は新たに作成したベクトルです。作成されたdata.frameでは、個々のベクトルに名前が与えられ(列名)、上から下にデータが並んでいます。

あたかも、cbind()でベクトルを結合した場合と同じように見えますが、クラスは異なります。

> class(m2)
[1] "matrix"

> class(df1)
[1] "data.frame"

data.frameでもmatrixと同様に、行番号や列番号を指定することで、要素にアクセスすることが出来ます。さらにdata.frameでは列名が存在するので(もしdata.frame作成時に列名を明示しなかった場合には、適当な列名がつけられます)、列名を明示して特定の要素にアクセスすることもできます。

例えば上で作成したdf1というdata.frameで、v1列をごっそり抽出したかったら、data.frame名$列名と書きます。

> df1$v1
[1] 3 1 2 5 8

これはベクトルとして抽出されているので、さらにベクトル内の位置を指定することで、該当する要素にアクセスできます。

> df1$v1[3]
[1] 2

パッケージのインストールと読み込み

インストール

PackagesペインのInstallボタンを押すと...

f:id:das_Kino:20191113103838p:plain

下図(左)のウィンドウが現れます。インストールしたいパッケージ名を入力すると、候補が現れるので、適切なパッケージを選びましょう。ここでは、データの要約や因子分析や媒介分析や...とにかく様々なことが可能になる便利なパッケージ、「psychパッケージ」をインストールしてみます。Installボタンを押すとインストールが開始されます。

f:id:das_Kino:20191212085332p:plain

あるいは以下のようにinstall.packages()関数を用いて、コードによりインストールするパッケージを指定することも出来ます。

install.packages("psych")

一度パッケージをインストールすれば、Rのバージョンが変わらない限り(つまり別のバージョンのRを再インストールしない限り)、そのPCでは同じパッケージをインストールする必要はありません。

ただし、パッケージによっては開発が続けられており、バージョンアップが行われることがあります。もし最新版のパッケージがCRAN上で配布されていれば、再び上記の手続きをとることにより、最新版のパッケージをインストールすることが出来ます。

「もし最新版のパッケージがCRAN上で配布されていれば」というところがポイントで、パッケージによっては、最新版が現時点ではCRANにまだ登録されていなかったり(いずれは登録されるようになるでしょう)、そもそもパッケージ自体がCRANに登録されていなかったりすることがあります。よくあるのは、「GitHub上ではパッケージが公開されているけれど、CRANには(まだ)登録されていない」というケースです。

その場合、

  1. devtoolsというパッケージをインストールして、GitHubからパッケージをインストールする機能をRに拡張させる(すでにdevtoolsパッケージをインストール済みならこの手順は省略可)
  2. devtoolsパッケージの関数を用いて、GitHubから、本来インストールしたいパッケージをインストールする

という手順になります。

例えばggplot2というパッケージは、CRANに登録されていますが、開発中のバージョンはGitHubから直接インストールすることが出来ます(install_github()の中は、当然パッケージごとに異なるパスを書く必要があります)。

# install.packages("devtools")
devtools::install_github("tidyverse/ggplot2")

ほとんどの場合は上記のようなコードがパッケージの公式ページに記載されているはずなので、コピペすればOKです。

パッケージの読み込み

さて、パッケージはポケモンで言うところの「わざマシン」のように、後付けでRの機能を拡張するための道具だと説明しました。ただし「わざマシン」と違うところがあります。それは、パッケージは使うたびに読み込みが必要というところです。

わざマシン」であれば、ひとたびピカチュウに「ねむる」のわざを覚えさせると、ポケモンセンターに寄ろうが、パーティーメンバーから外そうが、バトルで倒れようが、覚えたわざを使い続けることが出来ます。

しかしパッケージは、Rのセッションを立ち上げるたびに(Rを起動するたびに)、パッケージを読み込みなおす必要があります。インストールではありません。パッケージをそのセッション内で使用する場合は、読み込みが必要ということです。

例えば、psychパッケージには、ある量的変数に関する様々な要約統計量を計算してくれる、describe()という関数があります。この関数を、mtcars$mpgという変数に適用してみましょう。

> describe(mtcars$mpg)

 describe(mtcars$mpg) でエラー: 
   関数 "describe" を見つけることができませんでした 

できひんのかーい。

それもそのはず。このRセッションでは、まだpsychパッケージを読み込んでいなかったからです。R側からすると、「describe()...?いえ、知らない関数ですね」ということになります。

ではパッケージを読み込みましょう。それには、library()という関数を用います。

> library(psych)
> describe(mtcars$mpg)

   vars  n  mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 32 20.09 6.03   19.2    19.7 5.41 10.4 33.9  23.5 0.61    -0.37 1.07

パッケージを読み込みさえすれば、ちゃんとそのパッケージ内の関数を使えるようになりますね。

さて、ここで注意があります(次に述べることは筆者個人の意見です)。それは、Rにデフォルトで備わっている関数ではなく、パッケージ内の関数を用いる場合は、その関数がどのパッケージの関数かを常に明示すべきということです。

なぜかというと、プログラムのコードは、自分一人が見るものではなく、多くの場合は「今の自分以外」と共有するからです。「今の自分以外」には、他者も、「数年後の自分」も含まれます。

上記の例では、「describe()という関数が、psychパッケージの関数であることを知らない人」がいたら、混乱することでしょう。そこで、筆者はどのような関数であれ、パッケージ内の関数を使用する場合は、以下のように書くことを自分ルールとしています。

> library(psych)
> psych::describe(mtcars$mpg)

   vars  n  mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 32 20.09 6.03   19.2    19.7 5.41 10.4 33.9  23.5 0.61    -0.37 1.07

違いがわかるでしょうか。psych::describe(mtcars$mpg)と、関数名の前にパッケージ名を明記した点だけが違います。Rではこのように、パッケージ名を明記する場合は、「パッケージ名::パッケージ内の関数」と書きます(半角のコロン2つ)

これには別の利点もあります。Rでは、複数のパッケージが、同じ名前の関数を持っていることがあります。例えば、psychパッケージは、psych::mediate()という関数を持っていますが、別のmediationパッケージも、mediation::mediate()という関数を持っています。
関数名しか書かなかったとしたら、どちらのパッケージのmediate()関数なのか、区別がつきません。

外部ファイルの読み込み

csvファイルの読み込み

Rで解析をする際に、実験データなどがまとめられたファイルをRに読み込むことが多いでしょう。外部ファイルを読み込むための関数は、そのファイルがどのような形式でデータをまとめているかによって変わります。

典型的には、csvファイルとしてまとめられていることが多いと思います。csvとはComma Separated Valueの略で、下図のようにカンマでデータが区切られた、テキスト形式のファイルです。

f:id:das_Kino:20191130230440p:plain

Excelでデータをまとめている場合にも、「名前を付けて保存」する際に、「ファイルの種類」をcsvに変更すれば、csvファイルとして保存されます(拡張子が.csvになっていることを確認してください)。

f:id:das_Kino:20191130230806p:plain

csvファイルを読み込む方法は、主に2つです。

一つ目は、EnvironmentペインのImport Datasetボタンから「From Text」を選択し、GUIにより読み込む方法です。「From Text」には以下の2つがあります。

  • From Text (base)
    • デフォルトで使用可能なread.csv()関数によってデータを読み込む
  • From Text (readr)
    • readrパッケージのread_csv()関数によってデータを読み込む

f:id:das_Kino:20191130231117p:plain

どちらを使うのが良いかは話すと長くなるので、ここでは割愛します。もし数値だけが格納されたデータセットを読み込むのならば、どちらでも構わないと思います。

二つ目の方法は、直接read.csv()readr::read_csv()という関数をエディタやコンソール上で実行することです。実は上記のGUIを用いた場合にも、結局これらの関数が実行されることになります。

tmp <- read.csv("C:/R_practice/sample_data.csv")

注意してほしいことは、原則的に、読み込むデータセットは、長方形でなければならないということです。つまり、列によって行数が違うような凸凹したデータセットは読み込めないということです。

原則的に、と書いたのは、凸凹したデータセットでも読み込む方法があるからです。

例えば、データがこんな風にまとめられていたとしましょう。

f:id:das_Kino:20191130232452p:plain

このデータセットは、以下の悩ましい問題を含んでいます。

  1. 1行目に、1セルだけ、分析とは関係ない情報(記録日時)が掲載されている
  2. 2行目が空白
  3. Scoreの列に空白のセルがある

でも大丈夫。外部ファイルを読み込むための関数には、データを柔軟に読み込むための様々な引数が存在するのです。

tmp <- read.csv("C:/R_practice/sample_data.csv", skip = 2, na.strings = "", header = TRUE)

> tmp
  ID Age Score
1  1  25    80
2  2  30    NA
3  3  22    68

うまく読み込むことができました。それぞれの引数を説明します。

  • skip = 2
    • 上から何行を無視するかを決めることができます。今回は、2行目までを無視しました。
  • na.strings = ""
    • データが存在しないセルを、RではNAで表します。どのようなデータをNAとみなすかを指定できます。
    • 今回は空白のセルをNAとしたかったので、引用符の中に何も記述しませんでした。
    • もしデータが欠測していたセルを.で表していたなら、na.strings = "."とすればよいです。
  • header = TRUE
    • 読み込む対象の範囲のうち、一番上の行をヘッダ(列名)とみなすか、データの一部とみなすか、を指定できます。
    • もし一番上の行がいきなりデータから始まっていたら、header = FALSEとしましょう。

他にも色々と引数があります。

Excelファイルの読み込み

readxlパッケージのread_excel()という関数によって、Excelファイル(拡張子が.xlsxなど)を読み込むことも出来るようになりました。直接この関数をエディタやコンソール上で打ち込んでもいいし、やはりGUIも用意されています。

f:id:das_Kino:20191130233656p:plain

readxl::read_excel()の引数は、read.csv()readr::read_csv()とはちょっと異なっています。詳しくはコンソール上で?readxl::read_excelと入力して、ヘルプを確認してください。

あ、そうそう。このように、?の後ろに関数名を書くと、RStudioの右下にあるHelpペインに解説が表示されます。積極的に活用してください。

f:id:das_Kino:20191130234203p:plain

おまけ:データ構造の確認

自分でdata.frameなどを作成する場合には、どのようなデータを扱っているか(特に、数値か文字列か)について把握しやすいですが、外部からデータを読み込んだ場合は、本当に自分が想定するデータの構造になっているか、確認することが必須です。というか常に確認してください。

例えば、lme4というパッケージを読み込むと参照できるようになる、sleepstudyというデータセットがあります。これは、睡眠時間が削られることで、刺激に対する反応時間がどう変化していくかを記録したデータセットです。以下の通り3列が存在し、いずれも数値が格納されているように見えます。

> #install.packages("lme4")
> library(lme4)

> data(lme4::sleepstudy)
> head(lme4::sleepstudy) #data.frameの冒頭6行だけ表示する

  Reaction Days Subject
1 249.5600    0     308
2 258.7047    1     308
3 250.8006    2     308
4 321.4398    3     308
5 356.8519    4     308
6 414.6901    5     308

ここでstr()という関数を用いて、データ構造(structure)を確認してみましょう。

> str(lme4::sleepstudy)

'data.frame':  180 obs. of  3 variables:
 $ Reaction: num  250 259 251 321 357 ...
 $ Days    : num  0 1 2 3 4 5 6 7 8 9 ...
 $ Subject : Factor w/ 18 levels "308","309","310",..: 1 1 1 1 1 1 1 1 1 1 ...

反応時間を表すReactionや、実験経過日数を示すDaysには、numと書かれています。本記事ではデータの型や構造について説明を省略したので、何のことかわからないかもしれませんが、要は「数値」と見なされているということです。numはnumericの略です。

一方、実験参加者のID番号を示す、Subjectには、Factorと書かれています。よく見ると、"308", "309", "310",...と、各数字が引用符で囲われていますね。すなわち、見た目は数値であっても、これらは文字列のように見なされているということです。

このようなデータ構造をしっかりと確認しないと、分析時などに思わぬミスにつながります。特に外部ファイルを読み込んだ場合や、他者が作ったデータセットを使用する場合は、必ずstr()でデータ構造を確認するようにしてください。

おわりに

他にも書きたいことは山ほどありますが、キリがないのでこのあたりにします。あくまで今回の記事の目的は、「まったくRを触ったことが無い人に、事前に読んできてもらう資料」を作成することでした。これらを踏まえたうえで、他の基本的な機能や、より発展的な機能を勉強していただければ幸いです。

Enjoy!