9
13

More than 5 years have passed since last update.

R matrix入門

Last updated at Posted at 2017-07-15

Rのmatrix入門

matrixをつくる

データからmatrixを作る

• matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
• デフォルトは列優先でdataの数値が並べられる
• ncol, nrowのどちらか、もしくは両方で指定する
``````x <- matrix(1:6, nrow=3)
x
``````
``````##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
``````
``````x <- matrix(1:6, ncol=3)
x
``````
``````##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
``````

ゼロmatrixを作る

``````z <- matrix(0, nrow=2, ncol=3)
z
``````
``````##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0    0    0
``````

単位行列を作る

``````u <- diag(3)
u
``````
``````##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    1    0
## [3,]    0    0    1
``````

matrixの部分を取り出す

ベクトル、数値での指定

ベクトルで指定できる

``````x <- matrix(1:6, ncol=3)
x[2, 2:3]
``````
``````## [1] 4 6
``````

``````x <- matrix(1:6, ncol=3)
x[,2]
``````
``````## [1] 3 4
``````
``````x <- matrix(1:6, ncol=3)
x[1,]
``````
``````## [1] 1 3 5
``````

``````x <- matrix(1:9, nrow=3)
colnames(x) <- c("a","b","c")
rownames(x) <- c("R","Python","Julia")
x
``````
``````##        a b c
## R      1 4 7
## Python 2 5 8
## Julia  3 6 9
``````
``````x[,"b"]
``````
``````##      R Python  Julia
##      4      5      6
``````
``````x["Python",]
``````
``````## a b c
## 2 5 8
``````

ある行や列だけを取り出すと、ベクトルになる。matrixを維持したければ、drop=FALSEをつける

``````x <- matrix(1:6, ncol=3)
x[,2,drop=FALSE]
``````
``````##      [,1]
## [1,]    3
## [2,]    4
``````

関数を用いた抽出

``````x <- matrix(1:9, ncol=3)
diag(x)
``````
``````## [1] 1 5 9
``````

``````x <- matrix(1:9, ncol=3)
x[upper.tri(x,diag=TRUE)]
``````
``````## [1] 1 4 5 7 8 9
``````

matrixの情報の変更と取得

matrixの行名や列名をつける

``````x <- matrix(1:9, ncol=3)
x
``````
``````##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
``````

``````colnames(x) <- c("a","b","c")
rownames(x) <- c("R","Python","Julia")
x
``````
``````##        a b c
## R      1 4 7
## Python 2 5 8
## Julia  3 6 9
``````

matrixの構造に関する情報を取得する

``````x <- matrix(1:6, ncol=3)
x
``````
``````##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
``````

``````nrow(x)
``````
``````## [1] 2
``````

``````ncol(x)
``````
``````## [1] 3
``````

``````dim(x)
``````
``````## [1] 2 3
``````

``````x <- matrix(1:9, ncol=3)
colnames(x) <- c("a","b","c")
rownames(x) <- c("R","Python","Julia")
colnames(x)
``````
``````## [1] "a" "b" "c"
``````
``````rownames(x)
``````
``````## [1] "R"      "Python" "Julia"
``````

matrixの要素の統計的な情報を取得する

``````x <- matrix(1:9, nrow=3)
x
``````
``````##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
``````

``````rowSums(x)
``````
``````## [1] 12 15 18
``````

``````rowMeans(x)
``````
``````## [1] 4 5 6
``````

``````colSums(x)
``````
``````## [1]  6 15 24
``````

``````colMeans(x)
``````
``````## [1] 2 5 8
``````

matrixの概要を列単位で知る

``````summary(x)
``````
``````##        V1            V2            V3
##  Min.   :1.0   Min.   :4.0   Min.   :7.0
##  1st Qu.:1.5   1st Qu.:4.5   1st Qu.:7.5
##  Median :2.0   Median :5.0   Median :8.0
##  Mean   :2.0   Mean   :5.0   Mean   :8.0
##  3rd Qu.:2.5   3rd Qu.:5.5   3rd Qu.:8.5
##  Max.   :3.0   Max.   :6.0   Max.   :9.0
``````

matrixの列数や行数を変える操作

matrix同士を結合させる

``````x <- matrix(1:9,nrow=3)
y <- matrix(21:26,nrow=3)
x
``````
``````##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
``````
``````y
``````
``````##      [,1] [,2]
## [1,]   21   24
## [2,]   22   25
## [3,]   23   26
``````
``````#行を一定なので、column を bind する
cbind(x,y)
``````
``````##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    4    7   21   24
## [2,]    2    5    8   22   25
## [3,]    3    6    9   23   26
``````

``````x <- matrix(1:9, ncol=3)
y <- matrix(21:26, ncol=3)
x
``````
``````##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
``````
``````y
``````
``````##      [,1] [,2] [,3]
## [1,]   21   23   25
## [2,]   22   24   26
``````

``````rbind(x, y)
``````
``````##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
## [4,]   21   23   25
## [5,]   22   24   26
``````

matrixに列や行を追加する

``````x <- matrix(1:9, nrow=3)
x
``````
``````##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
``````

``````v <- c(1:3)
cbind(x, v)
``````
``````##            v
## [1,] 1 4 7 1
## [2,] 2 5 8 2
## [3,] 3 6 9 3
``````

``````rbind(x, v)
``````
``````##   [,1] [,2] [,3]
##      1    4    7
##      2    5    8
##      3    6    9
## v    1    2    3
``````

matrixの演算

matrix / vector は行数とベクトル要素数が同じならば、ベクトル各要素で各行を割る動作になる 具体例をみたらよくわかる

``````x <- matrix(1, nrow=4, ncol=3)
x
``````
``````##      [,1] [,2] [,3]
## [1,]    1    1    1
## [2,]    1    1    1
## [3,]    1    1    1
## [4,]    1    1    1
``````
``````v <- c(1:4)
x / v
``````
``````##           [,1]      [,2]      [,3]
## [1,] 1.0000000 1.0000000 1.0000000
## [2,] 0.5000000 0.5000000 0.5000000
## [3,] 0.3333333 0.3333333 0.3333333
## [4,] 0.2500000 0.2500000 0.2500000
``````
9
13
0

Register as a new user and use Qiita more conveniently

1. You get articles that match your needs
2. You can efficiently read back useful information
3. You can use dark theme
What you can do with signing up
9
13