[R] Creating 250 submatrices from a large single matrix with 2500 variables using loops

Tsjerk Wassenaar tsjerkw at gmail.com
Wed Mar 14 10:08:12 CET 2012


Hi Lazarus,

Sorry for my brevity before. I sent it from a phone.

# Generate dummy data matrix
x <- matrix(1:100,nrow=5)

# Rearrange into array; ten groups of two columns
y <- array(x,c(5,2,10))

# Average columns for each submatrix
apply(y,c(1,3),mean)

# Average per submatrix
apply(y,3,mean)

Hope it helps,

Tsjerk
On Wed, Mar 14, 2012 at 10:01 AM, Petr Savicky <savicky at cs.cas.cz> wrote:
> On Wed, Mar 14, 2012 at 03:22:39AM -0400, Lazarus Mramba wrote:
>> Dear all,
>>
>> I have a large matrix with about 2500 variables, and 100 rows.
>>
>> I would like to calculate the means of the every 10 variables starting from
>> 1:2500  and saving the results as a vector or matrix.
>> How can I do that?
>> Alternatively, How can I create 250 subset matrices in the order of
>> variables 1:2500 in groups of 10 from the single matrix which had initially
>> 2500 variables ?
>> I guess I have to use a loop, but I can't figure out how.
>
> Hi.
>
> Try the following. I will use smaller parameters for simplicity.
>
>  # a matrix 3 times 20
>  a <- matrix(1:60, nrow=3, ncol=20)
>  a
>
>       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
>  [1,]    1    4    7   10   13   16   19   22   25    28    31    34    37    40
>  [2,]    2    5    8   11   14   17   20   23   26    29    32    35    38    41
>  [3,]    3    6    9   12   15   18   21   24   27    30    33    36    39    42
>       [,15] [,16] [,17] [,18] [,19] [,20]
>  [1,]    43 46 49 52 55    58
>  [2,]    44    47    50    53    56    59
>  [3,]    45    48    51    54    57    60
>
>  #combine each 5 consecutive columns to a single column
>  dim(a) <- c(15, 4)
>  a
>
>        [,1] [,2] [,3] [,4]
>   [1,]    1   16   31   46
>   [2,]    2   17   32   47
>   [3,]    3   18   33   48
>   [4,]    4   19   34   49
>   [5,]    5   20   35   50
>   [6,]    6   21   36   51
>   [7,]    7   22   37   52
>   [8,]    8   23   38   53
>   [9,]    9   24   39   54
>  [10,]   10   25   40   55
>  [11,]   11   26   41   56
>  [12,]   12   27   42   57
>  [13,]   13   28   43   58
>  [14,]   14   29   44   59
>  [15,]   15   30   45   60
>
>  # compute column means
>  colMeans(a)
>
>  [1]  8 23 38 53
>
> Hope this helps.
>
> Petr Savicky.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



-- 
Tsjerk A. Wassenaar, Ph.D.

post-doctoral researcher
Molecular Dynamics Group
* Groningen Institute for Biomolecular Research and Biotechnology
* Zernike Institute for Advanced Materials
University of Groningen
The Netherlands



More information about the R-help mailing list