R言語

R言語入門

コードと実行結果を確かめながら、データを読み、整え、集計し、伝わるグラフにする基礎を学びます。

プログラミングもデータ分析も初めての人を想定しています。

01

Rとは

Rは統計計算とグラフ作成を得意とするプログラミング言語です。表データの読み込み、変換、集計、可視化、統計モデルまで一つの環境で行えます。操作をコードとして残せるため、同じ分析を再実行しやすいことも特徴です。

分析の基本手順
  • データの出所と意味を確認する
  • 行数・列・型・欠損値を調べる
  • 必要な形へ整える
  • 集計や可視化で特徴を確かめる
  • 条件、結果、限界を記録する
02

実行環境を用意する

CRANからRを導入します。RStudioなどのIDEを使う場合も、先にR本体が必要です。コンソールは1行ずつ試す場所、スクリプトは後から再実行するコードを保存する場所として使い分けます。

バージョンを確認R
R.version.string
表示例OUTPUT
[1] "R version 4.x.x (...)"
表示は環境で異なります バージョン番号やOS名が例と違っても問題ありません。学習用フォルダーを作り、大切なファイルとは分けて試してください。
03

最初のコードを実行する

#から行末まではコメントです。代入には一般に<-を使います。コンソール出力の[1]は、表示行の最初の値がベクトルの何番目かを示します。

計算して表示するR
# 3日分の学習時間
hours <- c(1.5, 2, 0.5)
total <- sum(hours)
print(total)
実行結果OUTPUT
[1] 4
04

値・型・変数

代表的な型は数値numeric、整数integer、文字列character、真偽値logicalです。整数を明示する場合は20LのようにLを付けます。

型を確認するR
name <- "Mity"
age <- 20L
height <- 168.5
is_student <- TRUE
class(name); class(age); class(height); class(is_student)
実行結果OUTPUT
[1] "character"
[1] "integer"
[1] "numeric"
[1] "logical"

文字列を数値へ変換するにはas.numeric()を使います。変換できない文字列は警告とともにNAになります。

05

ベクトルを扱う

ベクトルは同じ型の値を順番にまとめるRの基本データです。c()で作り、位置は1から数えます。演算は各要素へまとめて適用されます。

点数を一括計算R
scores <- c(72, 85, 91, 68)
adjusted <- scores + 5
scores[1]
adjusted
scores[scores >= 80]
実行結果OUTPUT
[1] 72
[1] 77 90 96 73
[1] 85 91
長さの違うベクトル Rは短いベクトルを繰り返して計算することがあります。意図しない再利用を避けるため、length()で長さを確認しましょう。
06

欠損値NA

NAは値が欠けていることを表します。NA == NAでは判定せず、is.na()を使います。集計時に無視するならna.rm = TRUEを明示します。

欠損を調べて平均を求めるR
temperatures <- c(22.5, NA, 24.0, 23.5)
is.na(temperatures)
sum(is.na(temperatures))
mean(temperatures, na.rm = TRUE)
実行結果OUTPUT
[1] FALSE  TRUE FALSE FALSE
[1] 1
[1] 23.33333
勝手に除外しない 欠損の理由によって分析結果が偏る場合があります。除外、補完、別分類のどれを選んだか記録してください。
07

データフレーム

データフレームは列ごとに名前と型を持つ表です。各行は同じ観測対象、各列は同じ項目になるよう作ります。

表を作って抽出するR
students <- data.frame(
  name = c("Aki", "Mika", "Sora"),
  score = c(78, 92, 85)
)
students[students$score >= 85, c("name", "score")]
実行結果OUTPUT
  name score
2 Mika    92
3 Sora    85

str()で構造、names()で列名、nrow()で行数を確認できます。詳しくはデータフレームとCSVで扱います。

08

条件分岐

ifの条件は長さ1の真偽値にします。ベクトルの各要素を分類する場合はifelse()が便利です。

点数を判定するR
score <- 82
if (score >= 80) {
  result <- "合格(よくできました)"
} else if (score >= 60) {
  result <- "合格"
} else {
  result <- "再挑戦"
}
print(result)
ifelse(c(55, 72, 88) >= 60, "合格", "再挑戦")
実行結果OUTPUT
[1] "合格(よくできました)"
[1] "再挑戦" "合格" "合格"
09

繰り返し

forは値を順番に取り出します。単純な集計にはベクトル向け関数を先に検討すると読みやすくなります。

名前を順番に表示R
names <- c("Aki", "Mika", "Sora")
for (i in seq_along(names)) {
  cat(i, ": ", names[i], "\n", sep = "")
}
実行結果OUTPUT
1: Aki
2: Mika
3: Sora
1:length(x)を避ける 空のベクトルでは意図しない列になります。添字が必要ならseq_along(x)を使います。
10

関数を作る

関数は入力を引数で受け取り、結果を返す処理です。最後に評価した式が戻り値になります。

税込価格を求めるR
price_with_tax <- function(price, rate = 0.1) {
  if (price < 0) stop("priceは0以上にしてください")
  floor(price * (1 + rate))
}
price_with_tax(1500)
price_with_tax(1500, 0.08)
実行結果OUTPUT
[1] 1650
[1] 1620

詳しくは関数・エラー・テストで学びます。

11

データを集計する

summary()で分布の概要を確認できます。グループ別集計にはaggregate()などを使います。

クラス別の平均点R
results <- data.frame(class = c("A", "A", "B", "B"), score = c(70, 90, 60, 80))
aggregate(score ~ class, data = results, FUN = mean)
実行結果OUTPUT
  class score
1     A    80
2     B    70
平均だけで判断しない 件数、中央値、ばらつき、外れ値、欠損も確認します。
12

グラフを描く

組み込みデータmtcarsで車重と燃費の関係を描きます。

散布図R
plot(mtcars$wt, mtcars$mpg,
  xlab = "車重(1000ポンド)", ylab = "燃費(mpg)",
  main = "車重と燃費", pch = 19, col = "steelblue")

実行すると横軸が車重、縦軸が燃費の散布図が表示されます。詳しくはデータ可視化で学びます。

13

CSVを読み書きする

read.csv()で読み、write.csv()で保存できます。読み込んだ直後に構造と件数を確認します。

保存して読み直すR
scores <- data.frame(name = c("Aki", "Mika"), score = c(82, 91))
write.csv(scores, "scores.csv", row.names = FALSE, fileEncoding = "UTF-8")
loaded <- read.csv("scores.csv", fileEncoding = "UTF-8")
str(loaded)
作業場所 getwd()で確認し、大切なファイルを上書きしないでください。
14

パッケージを利用する

導入は通常一度だけ、読み込みはRを起動するたびに行います。

導入と読み込みR
# コンソールで一度だけ
install.packages("ggplot2")
# スクリプト実行時
library(ggplot2)
packageVersion("ggplot2")
信頼できる配布元を使う 名前、公開元、更新状況、ライセンスを確認し、スクリプト内で毎回導入しないでください。
PRACTICE

練習問題

問題1:合格者を抽出する

c(55, 72, 88, 49)から60点以上だけを取り出してください。

解答例R
scores <- c(55, 72, 88, 49)
scores[scores >= 60]
実行結果OUTPUT
[1] 72 88
問題2:欠損を除いて平均を求める

c(120, NA, 180, 150)の平均を求めてください。

解答例R
mean(c(120, NA, 180, 150), na.rm = TRUE)
実行結果OUTPUT
[1] 150
問題3:値引き関数を作る

価格と値引率を受け取り、値引き後の整数価格を返してください。

解答例R
discount_price <- function(price, rate) floor(price * (1 - rate))
discount_price(2000, 0.2)
実行結果OUTPUT
[1] 1600
NEXT

次に学ぶこと