我有一个大型数据集,我想将其转换为数组。但是举个例子让我们举个简单的例子。 我有以下矩阵
`\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),其中第一个矩阵包含前五行“x”,第二个矩阵将包含最后5行。 我试过了
dim(x)<-c(5,6,2)
使矩阵-1具有1:30连续数,然后矩阵-2具有31:60连续数。这不是我的要求。
提前致谢。
答案 0 :(得分:10)
您提供的是LaTeX表示。 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
如果您不想使用外部包并且愿意接受每个切片的转置版本,则先转置然后重新定位。您无法转置数组,但是,您可以查看aperm
函数:
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(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
答案 1 :(得分: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))
答案 2 :(得分:0)
我无法判断您的样本数据是否真的采用XML-ish形式,或者只是看起来那样:-)。只要你目前在R中有一个充满数据的二维矩阵,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中数组的方便方法。