【R講座】ベクトルの基本

R

研究室に配属されたばかりの新入生や、これから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のベクトル作成

整数の連続列生成を行う時は演算記号の : を使います。

# 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型(論理型)はTRUEFALSEのみで構成されたデータ型です。

論理型ベクトルの作成

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であればTRUE
  • all():すべての要素が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がある場合の計算

関数の引数に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を無視して計算

今回は、ベクトルの基本的な操作方法を紹介しました。

統計処理では、データの前処理としてベクトルを操作することが多く、基本的な計算方法を理解することが重要です。

次回は、プログラミングの基本とオリジナル関数について説明していきます。

タイトルとURLをコピーしました