1 本講義の目的

  • RやR Studioの起動について学ぶ。
  • Rを使った計算について学ぶ。
  • オブジェクト、ベクトル、関数、データフレームなどについて学ぶ。
  • データの読み込み方について学ぶ。
  • 因子(factor)について学ぶ。

2 Rの起動

2.1 RStudioのセットアップ

Posit Cloud(旧名:RStudio Cloud)というサービスを利用して、次の手順によりRの開発環境を準備する

  1. Posit Cloud( https://posit.cloud/ )に行き、右上の「Log In」をクリックする
  2. 「Log In with Google」から立教のアカウントを選び、ログインする
  3. 「New Project」から「New RStudio Project」をクリックして新しいプロジェクトを立ち上げる

※卒論など本格的にRを使う場合はPosit Cloudではなく大学のPCを利用するか、自身のPCにRR Studioをインストールして使用することをおすすめする。Posit Cloudの無料枠は1ヶ月につき25時間しか利用できず、サーバーのスペックが限られているためである。

2.2 RStudioの基本操作

2.2.1 新規Rファイルの作成

Rスクリプト(R言語のコードを記述するテキストファイル)の新規作成を行うには、RStudio左上の「白い紙に(+)のマークがついているようなアイコン」をクリックし、「R Script」をクリックする

2.2.2 各部分の説明

RStudioの基本画面はこの4つの領域からなる。

  • 左上がRスクリプトの入力欄(コードを書く部分)
    • コードを書き、[Run]ボタンを押せば実行できる
  • 左下[Console]がRスクリプトの実行結果が出てくる画面
  • 右上[Environment]が読み込んだデータなどのオブジェクトが一覧で表示される画面
  • 右下[Files]が現在のワークスペースのファイルを表示している部分
    • 図を描けば[Plots]タブに表示され、Helpを呼び出せば[Help]タブに表示される

3 計算と代入

Rでは電卓やExcelで計算するのと同様に計算を行うことができる。

123 + 456
## [1] 579

3.1 代入

分析対象のデータや計算結果の値などのデータを格納するもののことをオブジェクト(object)や変数(variable)と呼ぶ。

あるオブジェクトに何らかの値を代入するときは、=<-という記号(演算子)を使う。
(なお、Rは<-による代入のほうが正統な記法である)

RStudio上では、<-Alt-のキーを同時に押すことで簡単に入力できる(Macの場合はOption + -)。

x <- 1 + 1  # オブジェクト x に 1+1の演算結果を代入

3.2 オブジェクトの確認

オブジェクト単体でコードを実行すれば、オブジェクトの中身を表示することができる。

x # オブジェクト x の中身を表示
## [1] 2

また、RStudioの[Environment]部を見ることでも確認することができる。

3.3 Rのデータ型

プログラミング言語では、データの型というものを意識する必要がある。

例えば、クォーテーション("')で囲っているものは文字列(character)型となるため、"1" + 1のような演算はできない点に気をつける。

Rの基本的なデータ型は次の通り。

データ型
数値(numeric) 1、0.1
文字列(character) “A”、“あいうえお”
論理値(logical) TRUE、FALSE、T、F

4 ベクトル

ベクトル(vector)という、複数の値が一列にならぶようにして入れられた形式のオブジェクトがある。

Excelでいうとデータを1行あるいは1列取り出したようなものにあたる。

ベクトルを作りたいときは、c()にカンマで区切りながら値を入れていく。 cはcombine(結合)のcである。

# ベクトル
y <- c(1, 20, 100)
y
## [1]   1  20 100

1~10の整数が入ったベクトルが欲しい時などは、1:10のように 始めの数と終わりの数で:を挟むように記述する。

# 1~10の整数
x <- 1:10
x
##  [1]  1  2  3  4  5  6  7  8  9 10

4.1 文字列を扱う際の注意点

文字列のデータを扱うときはクォーテーション("')で囲う。

z <- c("あ", "いう", "えおか") # これならエラーにならない
z
## [1] "あ"     "いう"   "えおか"

クォーテーションで囲まない場合はオブジェクト扱いになる

z <- c(あ, いう, えおか) #これだとエラー(「あ」「いう」「えおか」というオブジェクトを定義していないため)

日本語のオブジェクトに値を代入することもできるが、日本語はエラーの元なのでできるだけ避けたほうがよい

# 「あ」「いう」「えおか」をそれぞれ定義
<- "A"
いう <- "IU"
えおか <- "EOKA"

# これならエラーにならない
z <- c(あ, いう, えおか)
z
## [1] "A"    "IU"   "EOKA"

4.2 ベクトルとデータ型

1つのベクトルには1つのデータ型のデータしか入れることができない。

onetwothree <- c(1, "1", 2, "二", 3) #全部文字列(chr)になる
onetwothree
## [1] "1"  "1"  "2"  "二" "3"

4.3 ベクトルの要素の取得

LETTERSは大文字のアルファベットが入ったベクトルで、あらかじめ定義されている。

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"

ベクトルの要素を取り出すには、ベクトル[要素の番号] のように指定する。

LETTERS[1] # LETTERSの最初の要素
## [1] "A"
LETTERS[1:3] # LETTERSの1~3番目の要素
## [1] "A" "B" "C"
LETTERS[c(1, 12, 23)] # LETTERSの1,12,23番号の要素
## [1] "A" "L" "W"

5 関数

何らかの処理を行う機能を持ったオブジェクトを関数(function)あるいはメソッド(method)という。

sum(1:100) # sum: 数値ベクトルの合計値を返す
## [1] 5050
length(LETTERS) # length: ベクトルの長さ(要素数)を返す
## [1] 26

5.1 ヘルプ

関数の使い方など、わからないことがある場合はヘルプを参照すると便利である。

ヘルプは

  1. 調べたい関数名をhelp()に入れて実行する
  2. 関数名の前に?をつけて実行する
  3. (RStudioの場合)関数名にカーソルを置いた状態でF1キーを押す

といった方法で呼び出すことができる。

?sum

6 データフレーム

データフレーム(data frame)とは、Excelのワークシートのようにデータを表形式で保持するためのオブジェクトのこと。

Rでは基本的にデータフレームを使ってデータ分析を行うことになる。

6.1 データフレームの作成

df1 <- data.frame(クラス = c("B","A","A"),
                  英語 = c(79, 91, 89),
                  数学 = c(75, 81, 92))
df1
##   クラス 英語 数学
## 1      B   79   75
## 2      A   91   81
## 3      A   89   92

6.2 データフレームの要素の取得

df[行番号,列番号]のように座標を指定して要素を取り出すことができる。

df1[1, ] # 1行目を表示
##   クラス 英語 数学
## 1      B   79   75
df1[ ,2] # 2列目を表示
## [1] 79 91 89
df1[2] # 2列目をデータフレームとして表示
##   英語
## 1   79
## 2   91
## 3   89
df1[1:3, 1:3] # 1~3行の1~3列を表示
##   クラス 英語 数学
## 1      B   79   75
## 2      A   91   81
## 3      A   89   92
df1[c(1,3), c(1,3)] # 1,3行の1,3列を表示
##   クラス 数学
## 1      B   75
## 3      A   92

df["列名"]df$クラスのように列を指定することもできる

df1["クラス"]
##   クラス
## 1      B
## 2      A
## 3      A

取り出したデータフレームの一部を別途代入し、新しいオブジェクト(数値、ベクトル、データフレーム)にすることもできる。

df <- df1[c("英語","数学")]
df
##   英語 数学
## 1   79   75
## 2   91   81
## 3   89   92

6.3 簡単な集計処理の例

6.3.1 mean()

ベクトルの場合はmean()で平均値を計算できる

mean(1:6)
## [1] 3.5

6.3.2 colMeans()

colMeans()はデータフレームの各列に対して平均値の計算を行った結果を返す関数である。 (colSums()rowSums()rowMeans()なども存在する)

colMeans(df1[, -1]) # 1列目以外の各列(columns)に対する平均を表示
##     英語     数学 
## 86.33333 82.66667

7 外部データの読み込み

7.1 (参考)ワーキングディレクトリの設定

ワーキングディレクトリとは、「作業を行うディレクトリ」のこと。 「現在開いているディレクトリ」ということで”current directory”とも呼ばれる。

csvやxlsxのデータを読み込む場合はファイルが存在する場所を指定する必要があるため、意識する必要がある。

(RStudio Cloudではあまり意識しなくてもよいが、クラウドでなく手元のパソコンの中でRStudioを使う際には重要になる)

# 現在開いているディレクトリを調べる(get working directory)
getwd()

ワーキングディレクトリを設定するにはsetwd("作業したいディレクトリのパス")のように書く。

# set working directory
setwd(".")

(なお、"."はUNIX系OSでワーキングディレクトリを指すのでsetwd(".")は何も変化を起こさない)

7.2 csvデータの書き出し

データの書き出しにはwrite.csv()関数を使う。

#データをcsvファイルに書き出す
write.csv(df1, "df1.csv", row.names = FALSE)

なお、row.names = FALSEというオプションの引数(argument)は、行番号をcsvに含めずに保存することを指定するものである。(こうしないと行番号の列を含んだ状態でcsvが保存される)

7.3 csvデータの読み込み

データの読み込みにはread.csv()関数を使う。

#データをcsvファイルから読み込んでdf2という名前にする
df2 <- read.csv("df1.csv")

8 因子(factor)型とデータ型の変換

8.1 因子(factor)型

文字列と似たデータ型で因子(factor)型というものがある。

# 因子(ファクター)
classes <- as.factor(df2$クラス)
classes
## [1] B A A
## Levels: A B
str(classes) # str() = structure
##  Factor w/ 2 levels "A","B": 2 1 1

str()というデータの内部構造を表示する関数を使うと、classesは因子型であり、値の水準(levels)が"A","B"の2つあり、内部的には2,1,1と数値で保持されていることがわかる。

8.2 データ型の変換

as.factor()と同様にas.character()を使えば文字列型に戻すことができる。

str(as.character(classes))
##  chr [1:3] "B" "A" "A"

8.3 (参考) 文字列型の因子型への自動変換

バージョン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

9 (参考)その他のタイプのオブジェクト

Rでデータ分析を行うときは、基本的にベクトルとデータフレームを理解していればいい。

しかし、Rの世界も奥深いので、それらとも異なる形のデータと出会うこともある。本節ではそれらを紹介する。

9.1 リスト

リスト(list)はベクトルやデータフレームなど様々なオブジェクトをまとめることができる、非常に自由度が高いオブジェクトである。

リストの中にリストを内包するようなこともできる。

9.1.1 リストの作成

# リストの作成
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"

9.1.2 リストの要素へのアクセス

要素に名前がついていればlist$要素名で参照できる

# リストの中のdfという要素(データフレーム)の取り出し
list_ex$df
##   クラス 英語 数学
## 1      B   79   75
## 2      A   91   81
## 3      A   89   92

要素に名前がついていない場合、要素の番号(list[[i]])を指定して参照する

# リストの中のlistという要素(リスト)の第一要素([[1]])の取り出し
list_ex$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"

9.2 行列

行列(matrix)は、データフレームと非常に似ているものの、

  1. すべての要素のデータ型が統一されている
  2. 通常、要素は数値で構成される

という特徴を持つ。

9.2.1 行列の作成

行列は基本的にひとつのベクトルを用意して行数(nrow)や列数(ncol)を指定して作成する

# ベクトルから行列を作る場合
M <- matrix(data = c(1:6), nrow = 2, ncol = 3)
M
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6

as.matrix()関数でデータフレームを行列にすることもできる。

# データフレームの行列への変換
D <- as.matrix(df1[,2:3])
D
##      英語 数学
## [1,]   79   75
## [2,]   91   81
## [3,]   89   92

9.2.2 行列の演算

行列同士であれば%*%という演算子を用いて行列同士の積を計算したりなど、様々な演算が可能になる。

M %*% D
##      英語 数学
## [1,]  797  778
## [2,] 1056 1026

10 (参考)Rの入門向けサイト

10.1 日本語

10.2 英語