R には次のような行列があります。
|1|2|3|
|1|2|3|
|1|2|3|
これらの結果を得るために、マトリックス全体を時計回りに 90 度回転させる簡単な方法はありますか?
|1|1|1|
|2|2|2|
|3|3|3|
再度 90 度回転します。
|3|2|1|
|3|2|1|
|3|2|1|
?
t
エントリを回転させず、対角線に沿って反転します。
x <- matrix(1:9, 3)
x
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
t(x)
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
R 行列を時計回りに 90 度回転:
転置の前に列を逆にする必要もあります。
rotate <- function(x) t(apply(x, 2, rev))
rotate(x)
## [,1] [,2] [,3]
## [1,] 3 2 1
## [2,] 6 5 4
## [3,] 9 8 7
rotate(rotate(x))
## [,1] [,2] [,3]
## [1,] 9 6 3
## [2,] 8 5 2
## [3,] 7 4 1
rotate(rotate(rotate(x)))
## [,1] [,2] [,3]
## [1,] 7 8 9
## [2,] 4 5 6
## [3,] 1 2 3
rotate(rotate(rotate(rotate(x))))
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
R 行列を反時計回りに 90 度回転:
リバースの前にトランスポーズを行うことは、反時計回りに回転することと同じです。
foo = matrix(1:9, 3)
foo
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
foo <- apply(t(foo),2,rev)
foo
## [,1] [,2] [,3]
## [1,] 7 8 9
## [2,] 4 5 6
## [3,] 1 2 3