58

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|

?

4

5 に答える 5

105

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
于 2013-05-11T12:25:11.893 に答える