将行主要切换为列主要维度

时间:2012-10-12 12:35:15

标签: arrays r

我将R作为主要数据作为向量。 R将此解释为列主要数据,据我所知,没有办法告诉数组以行主要方式运行。

让我说我有:

array(1:12, c(3,2,2), 
    dimnames=list(c("r1", "r2", "r3"), c("c1", "c2"),c("t1", "t2"))
)

给出了:

, , t1

   c1 c2
r1  1  4
r2  2  5
r3  3  6

, , t2

   c1 c2
r1  7 10
r2  8 11
r3  9 12

我想将此数据转换为行主数组:

, , t1
   c1 c2
r1  1  2
r2  3  4
r3  5  6

, , t2

   c1 c2
r1  7  8
r2  9 10
r3 11 12

2 个答案:

答案 0 :(得分:6)

假设您的阵列位于a,即您已经拥有此阵列并且无法在读取时更改它,则以下内容将起作用:

a <- array(1:12, c(3,2,2), 
           dimnames=list(c("r1", "r2", "r3"), c("c1", "c2"),c("t1", "t2")))

b <- aperm(array(a, dim = c(2,3,2),
                 dimnames = dimnames(a)[2:1]),
           perm = c(2,1,3))
b

>     b
, , 1

   c1 c2
r1  1  2
r2  3  4
r3  5  6

, , 2

   c1 c2
r1  7  8
r2  9 10
r3 11 12

答案 1 :(得分:2)

解决方案:

aperm(array(1:12, c(2,3,2), 
    dimnames=list(c("c1","c2"),c("r1","r2","r3"),c("t1","t2"))),
    perm=c(2,1,3)
)

请注意,精子会切换尺寸。所以基本上用行切换列。另外,我需要更改dimnames中的列和行的顺序。

它产生了所需要的东西:

, , t1
   c1 c2
r1  1  2
r2  3  4
r3  5  6

, , t2

   c1 c2
r1  7  8
r2  9 10
r3 11 12