R !!!行列 {{outline}} ---- !!行列の基本 *同じ型のデータの2次元配置 *matrix関数で作成 *行の数は、nrow=行数 で指定 *列の数は、ncol=列数 で指定 *最初は、すべての要素の値を0にして作成しておくと楽。 {{pre > test.mx <- matrix(0, nrow=5, ncol=7) > test.mx [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 0 0 0 0 0 0 0 [2,] 0 0 0 0 0 0 0 [3,] 0 0 0 0 0 0 0 [4,] 0 0 0 0 0 0 0 [5,] 0 0 0 0 0 0 0 }} {{pre > test.mx <- matrix(1:35, nrow=5, ncol=7) > test.mx [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 1 6 11 16 21 26 31 [2,] 2 7 12 17 22 27 32 [3,] 3 8 13 18 23 28 33 [4,] 4 9 14 19 24 29 34 [5,] 5 10 15 20 25 30 35 }} *データの数が合わないとエラーになる。 *先に作っておいたベクトルデータを入れることも可能。 {{pre > test koku suu ei sekaisi rinri buturi kagaku 79 85 87 78 89 68 59 > test.mx[1,] <- test > test.mx [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 79 85 87 78 89 68 59 [2,] 2 7 12 17 22 27 32 [3,] 3 8 13 18 23 28 33 [4,] 4 9 14 19 24 29 34 [5,] 5 10 15 20 25 30 35 }} *カラムの見出しに名前を付ける {{pre > colnames(test.mx) <- c("koku", "suu", "ei", "sekaisi", "rinri", "buturi", "kagaku") > test.mx koku suu ei sekaisi rinri buturi kagaku [1,] 79 85 87 78 89 68 59 [2,] 2 7 12 17 22 27 32 [3,] 3 8 13 18 23 28 33 [4,] 4 9 14 19 24 29 34 [5,] 5 10 15 20 25 30 35 }} *各行の見出しに名前を付ける {{pre > rownames(test.mx) <- c("1mid", "1fin", "2mid", "2fin", "3fin") > test.mx koku suu ei sekaisi rinri buturi kagaku 1mid 79 85 87 78 89 68 59 1fin 2 7 12 17 22 27 32 2mid 3 8 13 18 23 28 33 2fin 4 9 14 19 24 29 34 3fin 5 10 15 20 25 30 35 }} *行列で、名前を指定して、値を出す。 {{pre > test.mx["2fin", "rinri"] [1] 24 }} !!行列の作成 matrix() matrix(データ, nrow=行数, ncol=列数) {{pre > matrix(1:6, nrow=2, ncol=3) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > matrix(1:6, nrow=3, ncol=2) [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 }} !!見出しをつける colnames(), rownames() colnames(data) <- c("koku", "suu", "eigo") !!要素の指定 [行番号, 列番号] {{pre > mx <- matrix(1:6, nrow=3, ncol=2) > mx [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 > mx[3, 1] [1] 3 > mx[2, 2] [1] 5 }} *行列のいずれかを省略すると、すべてを指定したことになる。 {{pre > mx [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 > mx[1, ] [1] 1 4 > mx[ , 2] [1] 4 5 6 }} !!行列の演算 {{pre > mx1 <- matrix(1:4, nrow=2, ncol=2) > mx2 <- matrix(5:8, nrow=2, ncol=2) > mx1 [,1] [,2] [1,] 1 3 [2,] 2 4 > mx2 [,1] [,2] [1,] 5 7 [2,] 6 8 > mx1 + mx2 [,1] [,2] [1,] 6 10 [2,] 8 12 > mx2 - mx1 [,1] [,2] [1,] 4 4 [2,] 4 4 > mx1 * mx2 [,1] [,2] [1,] 5 21 [2,] 12 32 > mx1 %*% mx2 [,1] [,2] [1,] 23 31 [2,] 34 46 }} *積に注意 !!行列の計算 rowSums() 各行の総和 colSums() 各列の総和 rowMeans() colMeans() {{pre > rowSums(mx1) [1] 4 6 > colSums(mx1) [1] 3 7 > rowMeans(mx1) [1] 2 3 > colMeans(mx1) [1] 1.5 3.5 }} !!行列の結合 rbind(), cbind() {{pre > rbind(mx1, mx2) [,1] [,2] [1,] 1 3 [2,] 2 4 [3,] 5 7 [4,] 6 8 > cbind(mx1, mx2) [,1] [,2] [,3] [,4] [1,] 1 3 5 7 [2,] 2 4 6 8 }}