【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