2012-10-12 17 views
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 

答えて

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 
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が寸法を切り替えることに注意してください。したがって、基本的に列は行で切り替わります。さらに、私は淡色の列と行の順序を変更する必要がありました。

ことが必要とされているまさに生成:

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

, , t2 

    c1 c2 
r1 7 8 
r2 9 10 
r3 11 12 
+1

私は混乱しています。ここに表示される配列は、あなたの質問にあるものではありません。私はあなたがフォームの配列を持っていることを理解しました。この場合、 'aperm() 'だけではあなたを助けません。 –

+0

データ(ベクター1:12)を目的の配列に変換したいと考えました。私はこれを考え出すのに時間を費やし、ここにこれを置くことが他人を助けるかもしれないと考えました。 – Datageek

+1

ああ、OK。あなたが「私が持っていると言います」と書いたとき、私はあなたを文字通りに連れて行きました。 –

関連する問題