ベクトル

ベクトルの作成

ベクトルの作成は c を利用する。複数の要素をカンマ区切りで c に代入すると、一つのベクトルとして生成される。また、等差数列や循環数列など、規則性のあるベクトルを作成する場合は seqrep などの利用する。

x <- c(23, 17, 67, 127)
x
## [1]  23  17  67 127

x <- rep(c(1, 2), length = 10)
x
##  [1] 1 2 1 2 1 2 1 2 1 2

x <- rep(c(1, 2), times = 10)
x
##  [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2

x <- rep(c(1, 2, 3), times = 3)
x
## [1] 1 2 3 1 2 3 1 2 3

x <- rep(c(1, 2, 3), times = c(3, 3, 3))
x
## [1] 1 1 1 2 2 2 3 3 3

x <- seq(1, 10, by = 2)
x
## [1] 1 3 5 7 9

x <- seq(1, 10, length = 2)
x
## [1] 1 10

x <- sequence(10)
x
##  [1]  1  2  3  4  5  6  7  8  9 10

x <- sequence(c(1, 2, 3, 4))
x
##  [1] 1 1 2 1 2 3 1 2 3 4

ベクトル要素の追加

ベクトルの要素を増やすとき、c または append を利用する。c は複数のベクトルを入力順に延長する。append は、あるベクトルに対して、指定した場所に別のベクトルを挿入する機能を持つ。


x <- c(1, 2, 3, 4, 5)
y <- c(-1, -2, -3, -4, -5)

w <- c(x, y)
w
## [1]  1  2  3  4  5 -1 -2 -3 -4 -5

w <- append(x, y)
w
## [1]  1  2  3  4  5 -1 -2 -3 -4 -5

w <- append(x, y, after = 2)
w
## [1]  1  2 -1 -2 -3 -4 -5  3  4  5

ベクトル要素の取得

ベクトルの要素を取り出すとき角括弧を利用する。角括弧に取得したい要素の添字を書き入れる。

x <- c(21, 43, 556, 23)
x[3]           # x の 3 番目の要素を取り出す
## [1] 556

x[c(1, 3)]     # x の 1 と 3 番目の要素を取り出す
## [1] 21 556

x[-3]          # x の 3 番目以外の要素を取り出す
## [1] 21 43 23

x[c(-1, -3)]   # x の 1 と 3 番目意外の要素を取り出す
## [1] 43 23

次のように、ある条件を満たす要素だけを取得することも可能。

y <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

# 条件判断(値が 5 未満ならば残す)
z <- (y < 5)
z
## [1] T T T T F F F F F F

# y のうち、5 未満の要素を取得する
y[z]
## [1] 1 2 3 4


# 次のように、条件判断を直接角括弧に書き込んでもよい(z を生成しなくて済む)
y[y < 5]
## [1] 1 2 3 4

ベクトルの並べ替え

ベクトルの並べ替えは sort または order を利用する。sort は並べ替えた後のベクトルを返す。order は並べ替えるためのインデックスを返す。

sort の例。decreasing = TRUE を指定すると、降順で並べ替えることができる。sort は並べ替えた後のベクトルを返すが、並べ替え用のインデックスも取得できる。

x <- c(1, 10, 20, 30, 40, 50, 60, 1, 30)

y <- sort(x)
y
## [1]  1  1 10 20 30 30 40 50 60

y <- sort(x, decreasing = TRUE)
y
## [1] 60 50 40 30 30 20 10  1  1

y <- sort(x, index.return = TRUE)
y$x
## [1]  1  1 10 20 30 30 40 50 60
y$ix
## [1] 1 8 2 3 4 9 5 6 7

order の例。order は並べ替えのためのインデックスを返す。

x <- c(1, 10, 20, 30, 40, 50, 60, 1, 30)

y <- order(x)
y
## [1] 1 8 2 3 4 9 5 6 7

y <- x[order(x)]
y
## [1]  1  1 10 20 30 30 40 50 60

y <- x[order(x, decreasing = TRUE)]
y
## [1] 60 50 40 30 30 20 10  1  1

y <- x[rev(order(x))]
y
## [1] 60 50 40 30 30 20 10  1  1



# インデックスを利用して、元の並び順に復元する
x <- c(7, 3, 1, 9, 5)    # x は最初のベクトル
y <- order(x)            # y はインデックス
z <- x[y]                # z は x を昇順に並べたベクトル
z
## [1] 1 3 5 7 9

w <- z[order(y)]         # w は x と同じ並びになる
w
## [1] 7 3 1 9 5

ベクトル要素の置換

ベクトルの置換 replace を利用する。replace(x, y, z) のように利用し、x には置換対象ベクトル、y には置換位置、z には置換後の内容を代入する。

x <- c(10, 20, 30, 40, 50)       # 置換対象
y <- c(2, 4)                     # 置換位置
z <- c(-20, -40)                 # 置換先

w <- replace(x, y, z)
w
## [1]  10 -20  30 -40  50

ベクトルの計算

ベクトルの四則演算は、数値と同じく +、-、*、/ を利用する。

記号入力例意味
+a+bベクトルaとベクトルbの和(a1+b1, a2+b2, …, an+bn)
-a-bベクトルaとベクトルbの差(a1-b1, a2-b2, …, an-bn)
*a*bベクトルaとベクトルbの積(a1*b1, a2*b2, …, an*bn)
/a/bベクトルaとベクトルbの商(a1/b1, a2/b2, …, an/bn)
%/%a%/%bベクトルaとベクトルbの整数商(a1%/%b1, a2%/%b2, …, an%/%bn)
%%a%%bベクトルaとベクトルbの余り(mod)(a1%%b1, a2%%b2, …, an%%bn)
^a^bベクトルaの成分へのベクトルbの成分累乗(a1b1, a2b2, …, anbn)
x <- c(0:5)
y <- c(5:0)
x + y
## [1] 5 5 5 5 5 5

ベクトルの集合演算

ベクトルの要素を集合として考えたときの演算例。

関数式入力式意味
union( , )union(x,y)和集合
intersect( , )intersect(x,y)積集合
setdiff( , )setdiff(x,y)差集合
setequal( , )setequal(x,y)集合としてこれらのベクトルは等しいか否か
x <- c(1:7)
y <- c(4:9)

union(x, y)
## [1] 1 2 3 4 5 6 7 8 9

intersect(x, y)
## [1] 4 5 6 7

setdiff(x, y)
## [1] 1 2 3

setequal(x, y)
## [1] FALSE