5

行優先のデータをベクトルとして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
4

2 に答える 2

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
于 2012-10-12T12:59:23.547 に答える
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)
)

aperm は寸法を切り替えることに注意してください。したがって、基本的に列は行と入れ替わります。さらに、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
于 2012-10-12T12:46:10.583 に答える