【R】行列の各横ベクトルの階差を計算した行列を求める
目的は、次の図のように、行列の各行ベクトルの要素ごとの階差を要素に持つ行列を求めること(列ベクトル同士で階差をとったもの)。
結論から述べると、次の①、②、③を実施すると良い。
①行列の転置を求める(関数tを使用する)
②列ベクトル同士の階差を求める(関数diffを使用する)
③転置を求める(関数tを使用する)
まず、データを確認する。
> head(random.matrix[17:20,]) one two three four five six [1,] 14 20 25 34 35 36 [2,] 6 16 18 27 36 41 [3,] 4 8 12 30 33 43 [4,] 7 29 33 35 37 39
①行列の転置を求める
> head(t(random.matrix[17:20,])) [,1] [,2] [,3] [,4] one 14 6 4 7 two 20 16 8 29 three 25 18 12 33 four 34 27 30 35 five 35 36 33 37 six 36 41 43 39
②列ベクトル同士の階差を求める(関数diffを使用する)
diffを使用すると、ベクトルの隣接する要素の階差を求めることができる。
これを行列に適用すると、各列ベクトル毎に階差が求まる。
> head(diff(t(random.matrix[17:20,]))) [,1] [,2] [,3] [,4] two 6 10 4 22 three 5 2 4 4 four 9 9 18 2 five 1 9 3 2 six 1 5 10 2
③転置を求める(関数tを使用する)
②で求めた列ベクトルの階差は、元の行列の行ベクトルの階差なので、最後に転置して元に戻す。
> head(t(diff(t(random.matrix[17:20,])))) two three four five six [1,] 6 5 9 1 1 [2,] 10 2 9 9 5 [3,] 4 4 18 3 10 [4,] 22 4 2 2 2