[R] reshape matrices

Marc Schwartz marc_schwartz at comcast.net
Tue Jul 1 17:48:44 CEST 2008


on 07/01/2008 04:58 AM Francisco Javier Santos Alamillos wrote:
> Hello everyone,
> 
> I need reshape an array. For example, if we have next array:
> 
>> a <- c(1,2,3,4,5,6,7,8,9,10,11,12)
>> dim(a) <- c(2,2,3)
>> a
> , , 1
> 
>      [,1] [,2]
> [1,]    1    3
> [2,]    2    4
> 
> , , 2
> 
>      [,1] [,2]
> [1,]    5    7
> [2,]    6    8
> 
> , , 3
> 
>      [,1] [,2]
> [1,]    9   11
> [2,]   10   12
> 
> I need to get next matrices:
> 
> 1   2   3   4
> 5   6   7   8
> 9 10 11 12
> 
> 1   3   2   4
> 5   7   6   8
> 9 11 10  12
> 
> 
> It exist any function that can be able to do it?
> 
> Thanks and sorry for my english.

Keep in mind, as you seem to recognize, that a matrix and an array, is a 
vector with a dim attribute.

Thus, to reshape an array or matrix, you need to alter the dim 
attribute, perhaps with a transpose for ordering purposes. There is more 
than one way to do this, but two would be:

 > t(matrix(a, 4, 3))
      [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12

 > matrix(a, 3, 4, byrow = TRUE)
      [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12

HTH,

Marc Schwartz



More information about the R-help mailing list