研究室に配属されたばかりの新入生や、これからRで統計分析を始めたいと思っている方へ向けて、【R講座】では、RとRStudioの基本的な使い方から統計手法の選び方、基本的なデータ分析方法を解説しています。特にRが初めての方でも安心して学べるように、RStudioのクリック操作も紹介していきます。実際のコード例を交えながら進めるので、これからの研究やデータ分析に、役立てていただけたら嬉しいです。

みなさん、こんにちは!
前回のR講座では、Rの基本操作方法について解説しました。
今回はRプログラミングの基礎となる「ベクトル操作」について解説します。
ベクトルはRプログラミングの最も基本的なデータ構造で、データ分析の様々な場面で活用されます。例えば、実験データの記録、アンケート結果の集計、時系列データの分析など、ほとんどの統計処理でベクトルの操作が必要になります。
- ベクトルのとは何か
- ベクトルの作成
- ベクトルの操作
- ベクトル演算
- NA(欠損値)を扱う方法
ベクトルとは
ベクトルとは、同じデータ型の値を複数まとめたデータ構造のことです。Rでは数値や文字列などを単独で扱う代わりに、ベクトルとして管理します。例えば、c(1, 2, 3)は数値ベクトルで、要素が3つあるデータです。Rのほとんどの演算やデータ操作はこのベクトルを使って行われます。

ベクトルと聞くと数学の難しい概念を思い浮かべるかもしれませんが、Rでは単に「要素が並んだデータの列」と考えれば大丈夫です。
ベクトルの作成

それでは、実際にベクトルを作成をしてみましょう。ここでは、次のデータ型のベクトル作成します。
- numeric型
- character型
- logical型
- Factor型
コードを実行しながら確認してみてください。
numeric型ベクトル
numeric型(数値型)は、数値を表す型です。
c()関数でベクトル作成c()関数で任意の要素を並べてベクトルを作成します。
# 1~5のベクトルを作成
c(1.0, 2.0, 3.0, 4.0, 5.0) [1] 1 2 3 4 5
整数の連続列生成を行う時は演算記号の : を使います。
# 1 ~ 5のベクトルを作成
1:5[1] 1 2 3 4 5
seq()関数でベクトル作成等分数列を作成する時はseq()関数の引数 length = を指定します。
# 1から10までの範囲を「5等分」する等差数列を生成
seq(1, 10, length = 5)[1] 1.00 3.25 5.50 7.75 10.00
等差数列を作成する時はseq()関数の引数 by = を指定します。
# 1から10まで、2ずつ増加する数列を生成
seq(1, 10, by = 2)[1] 1 3 5 7 9
req()関数でベクトル作成要素の反復生成を行う時はreq()関数を使います。引数によって様々な繰り返し方法があります。
# ベクトル 1:3 (つまり [1, 2, 3]) を 2回繰り返して生成
rep(1:3, times = 2)[1] 1 2 3 1 2 3
# ベクトル 1:3 を 長さ5になるまで繰り返して生成
rep(1:3, length = 5)[1] 1 2 3 1 2
# ベクトル c(1.0, 2.0, 3.0) の各要素をそれぞれ 異なる回数繰り返して生成
rep(c(1, 2, 3), 1:3)[1] 1 2 2 3 3 3
character型ベクトル
character型(文字列型)は文字列で構成されるデータ型です。Rを含む多くの言語は文字列を表現するために、値を引用符" "で囲みます。
c()関数を使ってアルファベットの入ったベクトルを作成できます。
# abcが入っている文字ベクトルの作成
c("a", "b", "c")[1] "a" "b" "c"
また、任意の文字列ベクトルを作成することもできます。
# R と RStudio が入っている文字ベクトルの作成
c("R","RStudio")[1] "R" "RStudio"
Rのデフォルトパッケージには、アルファベットが格納されているletters(小文字アルファベット)またはLETTERS(大文字アルファベット)というデータがあるので、abcの連番を簡単に作れます。
# abcが入っている文字ベクトルの作成
letters[1:3][1] "a" "b" "c"
character型のベクトルは、関数を使うことで文字列の変換や抽出などを行えます。
| 関数 | 説明 | 例 | 結果 |
|---|---|---|---|
paste() | 文字列の結合 | paste("A", "BC") | [1] "A BC" |
grep() | パターンマッチと置換 | grep("a", c("apple", "banana", "cherry", "grape")) | [1] 1 2 4 |
charmatch() | 部分的な文字列マッチング | charmatch("Al", c("Alice", "Bob", "Charlie")) | [1] 1 |
toupper() | 大文字に変換 | toupper("hello world") | "HELLO WORLD" |
tolower() | 小文字に変換 | tolower("HELLO WORLD") | "hello world" |
nchar() | 文字数の取得 | nchar("Hello R programming!") | [1] 21 |
substr() | 部分文字列の抽出 | substr("abcdefg", 2, 4) | "bcd" |
strsplit() | 文字列を正規表現で分割 | strsplit("apple,banana,cherry", ",") | [[1]] [1] "apple" "banana" "cherry" |
logical型ベクトル
logical型(論理型)はTRUEとFALSEのみで構成されたデータ型です。
c()関数を使って論理値の入ったベクトルを作成できます。
# abcが入っている文字ベクトルの作成
c(T, F, TRUE, FALSE) # 略称TまたはFでもOK[1] TRUE FALSE TRUE FALSE
論理型ベクトルに対して次のような論理演算が可能です。
&:論理積(AND)|:論理和(OR)!:否定(NOT)xor():排他的論理和(異なる場合にTRUE)
# 要素ごとの AND 演算
c(T, F, T) & c(TRUE, FALSE, FALSE)[1] TRUE FALSE FALSE
また、次の関数で論理ベクトル全体を調べることができます。
any():少なくとも1つの要素がTRUEであればTRUEall():すべての要素がTRUEならTRUE
any()を使う方法# 一つでもTRUEがあるか
any(c(T, F, T))[1] TRUE
all()を使う例# 全てがTRUEか
all(c(T, F, T))[1] FALSE
Factor型ベクトル
因子(Factor)はRにおいてカテゴリデータを効率的に扱うためのデータ構造です。カテゴリデータは文字列ではなく、内部的には整数で管理されるため、計算効率やメモリ効率が向上します。
factor()関数を使って因子型のベクトルを作成していきます。
# abcが3つ入っている因子ベクトルの作成
factor(rep(letters[1:3], time = 3))[1] a b c a b c a b c
Levels: a b c
因子に順序を付与したい場合は引数のlevels = c() に順序を指定します。
# 順序つき因子
factor(rep(letters[1:3], time = 3) , levels = c("c", "b", "a"))[1] a b c a b c a b c
Levels: c b a
ベクトル操作の基本

ベクトルの基本操作は、データの前処理で頻繁に使用されます。ここでは、以下のような操作について説明します。
- 要素の追加・削除・選択
ベクトルの特定の要素を取り出したり、削除したり、新しい要素を追加できます。 - データ型の確認・変換
ベクトルのデータ型を調べたり、必要に応じて別の型に変換できます。
これらの操作を活用することで、データを適切に整え、分析しやすくなります。
ベクトル要素の選択・変更・削除
[]で要素を選択Rでは、ベクトルの一部を取り出す際に [ ] を使用します。
# ベクトルの作成
x <- c(1:9)
# ベクトル x の2番目の要素を取得
x[2][1] 2
要素をまとめて取り出すときは、[]の中に複数指定します。
# ベクトル x の2番目の要素を取得
x[2:3][1] 2 3 4
# ベクトル x の2番目と4番目の要素を取得
x[c(2,4)][1] 2 4
ベクトルの要素を変更するときは、変更箇所に対して代入します。
# ベクトルの作成
x <- c(1:9)
# 4番目の要素を変更
x[4] <- 444
# x の中身を表示
x [1] 1 2 3 444 5 6 7 8 9
ベクトル要素の削除は - を使って要素を削除します。
# ベクトルの作成
x <- c(1:9)
# 4番目の要素を削除
x[-4][1] 1 2 3 5 6 7 8 9
先ほどと同じようにオブジェクト x にベクトルを作成しますが、ここでは各ベクトル要素にnames()関数で名前を付与します。
# ベクトルの作成
x <- c(1:9)
# ベクトルに名前を付与
(names(x) <- c("A", "B", "C", "D", "E", "F", "G", "H", "I"))A B C D E F G H I
1 2 3 4 5 6 7 8 9
[]の中に、ラベルの名前を入力することで、ベクトル内の要素を選択できます。
# ラベル A の要素を取得
x["A"]A
1
c()関数を使うとまとめて取り出せます。
# ラベル BとE の要素を取得
x[c("B", "E")]B E
2 5
ベクトル要素の置換・結合・挿入
replace() を用いた要素の置換replace()関数でベクトル要素の置き換えができます。
# ベクトルの作成
x <- c(1:9)
# 2, 5, 8番目を 0 に変更
replace(x, c(2,5,8), c(0,0,0))[1] 1 0 3 4 0 6 7 0 9
c()関数でベクトルの結合ができます。
# ベクトルの作成
x <- c(1, 2, 3)
y <- c(4, 5, 6)
z <- c(7, 8, 9)
# 3つのベクトルを結合
c(x, y, z)[1] 1 2 3 4 5 6 7 8 9
append() を用いた要素の挿入append()関数を使うことで柔軟にベクトルを挿入できます。
# ベクトルの作成
x <- c(1, 2, 3)
y <- c(4, 5, 6)
z <- c(7, 8, 9)
# 2つのベクトルを結合
w <- c(x ,z)
# wの3番目の後に y を挿入
append(w, y, after = 3)[1] 1 2 3 4 5 6 7 8 9
データ型の確認と変換
データ型の確認にはmode()関数を使います。
# ベクトルの作成
x <- c(1, 0, 1, 0, 1)
# データ型の確認
mode(x)[1] "numeric"

RStudioでは右上ペインの「Environmet」タブからデータ型を確認できます。
as.〇〇() 関数を使うと、ベクトルのデータ型を変換できます。
| 関数 | 変換先のデータ型 | 説明 |
|---|---|---|
as.numeric(x) | 数値型 | 数値に変換(整数・小数) |
as.integer(x) | 整数型 | 整数に変換(小数は切り捨て) |
as.character(x) | 文字列型 | 文字列に変換 |
as.logical(x) | 論理型 | 0 は FALSE、それ以外は TRUE に変換 |
as.factor(x) | 因子型 | カテゴリデータとして扱う |
as.Date(x) | 日付型 | 文字列や数値を日付として扱う |
# character型のオブジェクト x を作成
x <- c("1", "2", "3")
# 文字列を数値に変換
as.numeric(x)[1] 1 2 3

R では、データの型や構造を柔軟に変更できます。ベクトル操作を理解することで、データ処理が効率的になります。
ベクトル演算

Rでは、同じ長さのベクトル同士で算術演算や比較演算を行うと、対応する要素ごとに計算されます。実際にコードを使って動作を確認してみましょう。
ベクトルの算術演算
Rでは同じ長さ同士のベクトル間で算術演算や比較演算が対応する要素ごとに行われます。
# 加算
c(1, 2) + c(3, 4)[1] 4 6
ベクトルに対してスカラー値(単一の値)を演算する場合は、全要素に同じ演算が適用されます。
# ベクトルに1を足す
c(1, 2, 3) + 1[1] 2 3 4
長さの異なるベクトル同士の演算では、長さが異なる場合、短い方の要素が繰り返し使われますが、長さが合わない場合は警告が出ることもあります。
c(5, 4, 3) - c(2, 1)[1] 3 3 1
Warning message:
In c(5, 4, 3) - c(2, 1) :
longer object length is not a multiple of shorter object length
ベクトルの比較演算
Rでは同じ長さ同士のベクトル間で算術演算や比較演算が対応する要素ごとに行われます。
# 同じ長さのベクトル同士の比較
c(1, 2) == c(1, 3)[1] TRUE FALSE
ベクトルに対してスカラー値(単一の値)を演算する場合は、全要素に同じ演算が適用されます。
# 異なる長さのベクトル同士の比較演算
c(1, 2, 3, 4, 5) > 3[1] FALSE FALSE FALSE TRUE TRUE
各要素に演算を行う関数
数値ベクトルの各要素に対して使える関数には、次のようなものがあります。
| 関数 | 説明 | 例 | 結果 |
|---|---|---|---|
sum() | 総和 | sum(c(1, 2, 3)) | [1] 6 |
mean() | 平均 | mean(c(1, 2, 3)) | [1] 2 |
var() | 分散 | var(c(1, 2, 3)) | [1] 1 |
max() | 最大値 | max(c(1, 2, 3)) | [1] 3 |
min() | 最小値 | min(c(1, 2, 3)) | [1] 1 |
range() | 範囲 | range(c(1, 2, 3)) | [1] 1 3 |
cumsum() | 累積和 | cumsum(c(1, 2, 3)) | [1] 1 3 6 |
prod() | 総積 | prod(c(1, 2, 3)) | [1] 6 |
sort() | 昇順整列 | sort(c(3, 1, 2)) | [1] 1 2 3 |
rev() | 逆順 | rev(c(1, 2, 3)) | [1] 3 2 1 |
NAがベクトルに含まれる場合、計算結果はNAになります。
# NAが含まれるベクトルの計算
x <- c(1, NA, 3)
sum(x)[1] NA
関数の引数にna.rm = TRUEが設定されている場合、NAを無視して計算できます。
# NAが含まれるベクトルの計算
x <- c(1, NA, 3)
sum(x, na.rm = TRUE)[1] 4

今まで基本操作や基礎知識ばかり紹介してきたが、mean()やvar()はようやく統計らしい内容になってきましたね!
まとめ
- ベクトルのとは何か
- 同じデータ型の値を複数まとめたデータ構造
- Rでは数値や文字列を単独で使う代わりに、ベクトルとして管理
- ベクトルの作成
c()関数で任意の要素を並べる- 因子型は
factor()関数で作成
- ベクトルの操作
[]で選択・変更・削除as.〇〇()関数でデータ型を変換(例:as.numeric())
- ベクトル演算
- 算術演算:ベクトル同士やスカラーとの演算(例:
c(1, 2) + c(3, 4)) - 比較演算:要素ごとに比較(例:
c(1, 2) == c(1, 3)) sum(), mean(), var()などの統計関数
- 算術演算:ベクトル同士やスカラーとの演算(例:
- NA(欠損値)を扱う方法
- NAが含まれる場合、計算結果はNAになる
na.rm = TRUEでNAを無視して計算

今回は、ベクトルの基本的な操作方法を紹介しました。
統計処理では、データの前処理としてベクトルを操作することが多く、基本的な計算方法を理解することが重要です。
次回は、プログラミングの基本とオリジナル関数について説明していきます。

最後に、実際に私が購入したおすすめできる本を厳選して紹介します。
アフィリエイトリンクを使っていますが、クリックしていただけると更新の励みになります。よろしければぜひご覧ください!

Rによる統計解析 単行本 – 2009/4/1

実際のコードや技法が詰め込まれたわかりやすい書籍です。
Rで統計解析をするときの辞書的な本として愛用しています。

実験で使うとこだけ生物統計1 キホンのキ 決定版 単行本 – 2024/7/25

統計解析の基礎をわかりやすく解説している本です。
難しい用語や数式が少ないので、統計初心者におすすめです。

実験で使うとこだけ生物統計2 キホンのホン 決定版 単行本 – 2024/7/25

キホンのキに続き、統計検定の本質から検定法を説明している書籍です。
実験計画を立てる前におすすめしたい一冊です。



