2012-03-05 19 views
1

大きなデータセットがあり、配列に変換したい。しかし、例えば、簡単な例があります。最初の行列は、「X」と第2の行列の最初の5行は、最後含まれていますが含まれている 私は必要なもの行列行列を配列に変換する方法は?

`\begin{table}[ht] 
\begin{center} 
\begin{tabular}{rrrrrrr} 
\hline 
& 1 & 2 & 3 & 4 & 5 & 6 \\ 
\hline 
1 & 1 & 11 & 21 & 31 & 41 & 51 \\ 
2 & 2 & 12 & 22 & 32 & 42 & 52 \\ 
3 & 3 & 13 & 23 & 33 & 43 & 53 \\ 
4 & 4 & 14 & 24 & 34 & 44 & 54 \\ 
5 & 5 & 15 & 25 & 35 & 45 & 55 \\ 
6 & 6 & 16 & 26 & 36 & 46 & 56 \\ 
7 & 7 & 17 & 27 & 37 & 47 & 57 \\ 
8 & 8 & 18 & 28 & 38 & 48 & 58 \\ 
9 & 9 & 19 & 29 & 39 & 49 & 59 \\ 
10 & 10 & 20 & 30 & 40 & 50 & 60 \\ 
\hline 
\end{tabular} 
\end{center} 
\end{table} 
` 

を以下している寸法(5,6,2)の配列にこの行列を変換することで、 5行。 I 1:30連続番号をマトリックス-1を行い、その後、マトリックス2を31:60の連続番号を

dim(x)<-c(5,6,2) 

を試みました。それは私の必要条件ではありません。

ありがとうございます。

+0

(5、 6,2) '...これらの次元をどのように埋めているのかを試してみる必要があるかもしれません。 – Chase

+0

これらの配列を埋め込むためにRにどうやって問い合わせることができますか? – Iftikhar

答えて

10

は、LaでありますTeX表現。 Rで同じ行列が

M <- matrix(1:60, ncol=6) # a 10 x 6 matrix 

は「abind」パッケージからabindの使用を検討して次のようになります。

require(abind) 
abind(M[1:5,], M[6:10, ], along=3) 
#----------------- 
, , 1 

    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 1 11 21 31 41 51 
[2,] 2 12 22 32 42 52 
[3,] 3 13 23 33 43 53 
[4,] 4 14 24 34 44 54 
[5,] 5 15 25 35 45 55 

, , 2 

    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 6 16 26 36 46 56 
[2,] 7 17 27 37 47 57 
[3,] 8 18 28 38 48 58 
[4,] 9 19 29 39 49 59 
[5,] 10 20 30 40 50 60 

あなたが外パッケージを使用したくなかった場合は、それぞれの転置バージョンのために解決しますスライスしてから、最初にトランスポーズしてから再びディメンションを作成します。

Mt <- t(M) 
dim(Mt) <- c(6, 5, 2) 
Mt 
, , 1 

    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 2 3 4 5 
[2,] 11 12 13 14 15 
[3,] 21 22 23 24 25 
[4,] 31 32 33 34 35 
[5,] 41 42 43 44 45 
[6,] 51 52 53 54 55 

, , 2 

    [,1] [,2] [,3] [,4] [,5] 
[1,] 6 7 8 9 10 
[2,] 16 17 18 19 20 
[3,] 26 27 28 29 30 
[4,] 36 37 38 39 40 
[5,] 46 47 48 49 50 
[6,] 56 57 58 59 60 

apermソリューション:あなたは、配列を転置することはできません、しかし、あなたが見て可能性がaperm機能があり

> aperm(Mt, c(2,1,3)) 
, , 1 

    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 1 11 21 31 41 51 
[2,] 2 12 22 32 42 52 
[3,] 3 13 23 33 43 53 
[4,] 4 14 24 34 44 54 
[5,] 5 15 25 35 45 55 

, , 2 

    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 6 16 26 36 46 56 
[2,] 7 17 27 37 47 57 
[3,] 8 18 28 38 48 58 
[4,] 9 19 29 39 49 59 
[5,] 10 20 30 40 50 60 
あなたは `配列(yourMatrixHere、DIM = cに開始することができます
+2

高次の配列には「S Poetry」の章があり、それはいくつかの'aperm'の詳細な説明。 http://www.burns-stat.com/pages/spoetry.html –

0

あなたのサンプルデータが実際にそのXML-ish形式になっているのか、それともちょうどそのように見えるのかはわかりません:-)。あなたが現在Rのデータでいっぱいの2次元マトリックスを持っている限り、Chaseの答えはおそらく行います。あなたは非常に慎重になりたい場合は、杓子定規だ

data.cube <- array(NA, dim = c(5,6,2)) 
data.cube[,,1] <- your.matrix[1:5,] 
data.cube[,,2] <- your.matrix[6:10,] 

を試みるが、私はそれはR.

で配列にデータを供給するための便利な方法をいくつか指摘していただければ幸いです
+0

あなたの応答に感謝します。 – Iftikhar

1

方法について:

M <- matrix(1:60,nrow=10) 

M2 <- lapply(split(M,0:9%/%5),matrix,nrow=5) 
M2 
$`0` 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 1 11 21 31 41 51 
[2,] 2 12 22 32 42 52 
[3,] 3 13 23 33 43 53 
[4,] 4 14 24 34 44 54 
[5,] 5 15 25 35 45 55 

$`1` 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 6 16 26 36 46 56 
[2,] 7 17 27 37 47 57 
[3,] 8 18 28 38 48 58 
[4,] 9 19 29 39 49 59 
[5,] 10 20 30 40 50 60 

そして、あなたが本当に必要な場合はarray:あなたが提供するどのような

array(unlist(M2),c(5,6,2)) 
関連する問題