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

Bert Gunter gunter.berton at gene.com
Wed Mar 14 11:46:04 CET 2012


??
Petr's solution is shorter and for large problems considerably faster...

-- Bert

On Wed, Mar 14, 2012 at 2:08 AM, Tsjerk Wassenaar <tsjerkw at gmail.com> wrote:
> 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
>
> ______________________________________________
> 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.



-- 

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm



More information about the R-help mailing list