Posit Cloud(旧名:RStudio Cloud)というサービスを利用して、次の手順によりRの開発環境を準備する
※卒論など本格的にRを使う場合はPosit Cloudではなく大学のPCを利用するか、自身のPCにRとR Studioをインストールして使用することをおすすめする。Posit Cloudの無料枠は1ヶ月につき25時間しか利用できず、サーバーのスペックが限られているためである。
Rスクリプト(R言語のコードを記述するテキストファイル)の新規作成を行うには、RStudio左上の「白い紙に(+)のマークがついているようなアイコン」をクリックし、「R Script」をクリックする
RStudioの基本画面はこの4つの領域からなる。
Rでは電卓やExcelで計算するのと同様に計算を行うことができる。
## [1] 579
分析対象のデータや計算結果の値などのデータを格納するもののことをオブジェクト(object)や変数(variable)と呼ぶ。
あるオブジェクトに何らかの値を代入するときは、=
や<-
という記号(演算子)を使う。
(なお、Rは<-
による代入のほうが正統な記法である)
RStudio上では、<-
はAlt
と-
のキーを同時に押すことで簡単に入力できる(Macの場合はOption + -
)。
オブジェクト単体でコードを実行すれば、オブジェクトの中身を表示することができる。
## [1] 2
また、RStudioの[Environment]部を見ることでも確認することができる。
プログラミング言語では、データの型というものを意識する必要がある。
例えば、クォーテーション("
や'
)で囲っているものは文字列(character)型となるため、"1" + 1
のような演算はできない点に気をつける。
Rの基本的なデータ型は次の通り。
データ型 | 例 |
---|---|
数値(numeric) | 1、0.1 |
文字列(character) | “A”、“あいうえお” |
論理値(logical) | TRUE、FALSE、T、F |
ベクトル(vector)という、複数の値が一列にならぶようにして入れられた形式のオブジェクトがある。
Excelでいうとデータを1行あるいは1列取り出したようなものにあたる。
ベクトルを作りたいときは、c()
にカンマで区切りながら値を入れていく。
c
はcombine(結合)のcである。
## [1] 1 20 100
1~10の整数が入ったベクトルが欲しい時などは、1:10
のように
始めの数と終わりの数で:
を挟むように記述する。
## [1] 1 2 3 4 5 6 7 8 9 10
文字列のデータを扱うときはクォーテーション("
や'
)で囲う。
## [1] "あ" "いう" "えおか"
クォーテーションで囲まない場合はオブジェクト扱いになる
日本語のオブジェクトに値を代入することもできるが、日本語はエラーの元なのでできるだけ避けたほうがよい
## [1] "A" "IU" "EOKA"
1つのベクトルには1つのデータ型のデータしか入れることができない。
## [1] "1" "1" "2" "二" "3"
LETTERS
は大文字のアルファベットが入ったベクトルで、あらかじめ定義されている。
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z"
ベクトルの要素を取り出すには、ベクトル[要素の番号]
のように指定する。
## [1] "A"
## [1] "A" "B" "C"
## [1] "A" "L" "W"
何らかの処理を行う機能を持ったオブジェクトを関数(function)あるいはメソッド(method)という。
## [1] 5050
## [1] 26
データフレーム(data frame)とは、Excelのワークシートのようにデータを表形式で保持するためのオブジェクトのこと。
Rでは基本的にデータフレームを使ってデータ分析を行うことになる。
## クラス 英語 数学
## 1 B 79 75
## 2 A 91 81
## 3 A 89 92
df[行番号,列番号]
のように座標を指定して要素を取り出すことができる。
## クラス 英語 数学
## 1 B 79 75
## [1] 79 91 89
## 英語
## 1 79
## 2 91
## 3 89
## クラス 英語 数学
## 1 B 79 75
## 2 A 91 81
## 3 A 89 92
## クラス 数学
## 1 B 75
## 3 A 92
df["列名"]
やdf$クラス
のように列を指定することもできる
## クラス
## 1 B
## 2 A
## 3 A
取り出したデータフレームの一部を別途代入し、新しいオブジェクト(数値、ベクトル、データフレーム)にすることもできる。
## 英語 数学
## 1 79 75
## 2 91 81
## 3 89 92
ワーキングディレクトリとは、「作業を行うディレクトリ」のこと。 「現在開いているディレクトリ」ということで”current directory”とも呼ばれる。
csvやxlsxのデータを読み込む場合はファイルが存在する場所を指定する必要があるため、意識する必要がある。
(RStudio Cloudではあまり意識しなくてもよいが、クラウドでなく手元のパソコンの中でRStudioを使う際には重要になる)
ワーキングディレクトリを設定するにはsetwd("作業したいディレクトリのパス")
のように書く。
(なお、"."
はUNIX系OSでワーキングディレクトリを指すのでsetwd(".")
は何も変化を起こさない)
データの書き出しにはwrite.csv()
関数を使う。
なお、row.names = FALSE
というオプションの引数(argument)は、行番号をcsvに含めずに保存することを指定するものである。(こうしないと行番号の列を含んだ状態でcsvが保存される)
文字列と似たデータ型で因子(factor)型というものがある。
## [1] B A A
## Levels: A B
## Factor w/ 2 levels "A","B": 2 1 1
str()
というデータの内部構造を表示する関数を使うと、classes
は因子型であり、値の水準(levels)が"A","B"
の2つあり、内部的には2,1,1と数値で保持されていることがわかる。
as.factor()
と同様にas.character()
を使えば文字列型に戻すことができる。
## chr [1:3] "B" "A" "A"
バージョン4.0.0より前のRではデータフレーム作成時(data.frame()
)やcsvの読み込み時(read.csv()
)には、文字列型のデータは因子型に自動的に変換する処理がdata.frame()
やread.csv()
の関数ではデフォルト設定となっていたため、不意に因子型に遭遇することがあった。もし古いRを使っていて自動変換を防ぎたい場合は、stringsAsFactors = FALSE
という引数を追加して関数を実行すればよい。
df3 <- data.frame(クラス = c("B","A","A"),
英語 = c(79, 91, 89),
数学 = c(75, 81, 92),
stringsAsFactors = FALSE)
str(df3)
## 'data.frame': 3 obs. of 3 variables:
## $ クラス: chr "B" "A" "A"
## $ 英語 : num 79 91 89
## $ 数学 : num 75 81 92
Rでデータ分析を行うときは、基本的にベクトルとデータフレームを理解していればいい。
しかし、Rの世界も奥深いので、それらとも異なる形のデータと出会うこともある。本節ではそれらを紹介する。
リスト(list)はベクトルやデータフレームなど様々なオブジェクトをまとめることができる、非常に自由度が高いオブジェクトである。
リストの中にリストを内包するようなこともできる。
# リストの作成
list_ex <- list(vector = c("A", "B", "C"),
df = df1,
list = list(LETTERS, letters))
list_ex
## $vector
## [1] "A" "B" "C"
##
## $df
## クラス 英語 数学
## 1 B 79 75
## 2 A 91 81
## 3 A 89 92
##
## $list
## $list[[1]]
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z"
##
## $list[[2]]
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
要素に名前がついていればlist$要素名
で参照できる
## クラス 英語 数学
## 1 B 79 75
## 2 A 91 81
## 3 A 89 92
要素に名前がついていない場合、要素の番号(list[[i]]
)を指定して参照する
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z"
行列(matrix)は、データフレームと非常に似ているものの、
という特徴を持つ。
行列は基本的にひとつのベクトルを用意して行数(nrow)や列数(ncol)を指定して作成する
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
as.matrix()
関数でデータフレームを行列にすることもできる。
## 英語 数学
## [1,] 79 75
## [2,] 91 81
## [3,] 89 92