5

我有一个矩阵:

R> pippo.m
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12
[4,]   13   14   15   16
[5,]   17   18   19   20
[6,]   21   22   23   24

我想用dim =(2,4,3)将这个矩阵转换为3D数组。通过 pippo.m 的 transponse,我可以获得类似的结果,但列和行旋转。

> pippo.t <- t(pippo.m)

> pippo.vec <- as.vector(pippo.t)

> pippo.arr <- array(pippo.vec,dim=c(4,2,3),dimnames=NULL)

> pippo.arr
 , , 1
     [,1] [,2]
 [1,]    1    5
 [2,]    2    6
 [3,]    3    7
 [4,]    4    8

 , , 2
     [,1] [,2]
[1,]    9   13
[2,]   10   14
[3,]   11   15
[4,]   12   16

, , 3
     [,1] [,2]
[1,]   17   21
[2,]   18   22
[3,]   19   23
[4,]   20   24

实际上,我更愿意保持原始数据的相同分布,因为行和列代表经度和纬度,第三维是时间。所以我想获得这样的东西:

pippo.a 
, , 1
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8


, , 2
     [,1] [,2] [,3] [,4]
[1,]    9   10   11   12
[2,]   13   14   15   16


, , 3
     [,1] [,2] [,3] [,4]
[1,]   17   18   19   20
[2,]   21   22   23   24

我能怎么做?

4

1 回答 1

6

看看aperm的魔力!

m <- matrix(1:24,6,4,byrow = TRUE)
> aperm(array(t(m),c(4,2,3)),c(2,1,3))
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8

, , 2

     [,1] [,2] [,3] [,4]
[1,]    9   10   11   12
[2,]   13   14   15   16

, , 3

     [,1] [,2] [,3] [,4]
[1,]   17   18   19   20
[2,]   21   22   23   24
于 2012-07-20T14:37:46.623 回答