[R] run function on subsets of matrix

fisken torpedofisken at gmail.com
Mon Mar 28 07:16:58 CEST 2011


Thanks,
the drop=FALSE is bound to come in handy.

And aggregate was indeed what I was looking.

Thanks again

2011/3/27 David Winsemius <dwinsemius at comcast.net>:
>
> On Mar 27, 2011, at 3:22 AM, peter dalgaard wrote:
>
>>
>> On Mar 27, 2011, at 08:25 , David Winsemius wrote:
>>
>>>
>>> On Mar 26, 2011, at 10:26 PM, fisken wrote:
>>>
>>>> I was wondering if it is possible to do the following in a smarter way.
>>>>
>>>> I want get the mean value across the columns of a matrix, but I want
>>
>> _along_ the columns, I assume.
>>
>>>> to do this on subrows of the matrix, given by some vector(same length
>>>> as the the number of rows). Something like
>>>>
>>>> nObs<- 6
>>>> nDim <- 4
>>>> m  <-   matrix(rnorm(nObs*nDim),ncol=nDim)
>>>> fac<-sample(1:(nObs/2),nObs,rep=T)
>>>>
>>>> ##loop trough different 'factor' levels
>>>> for (i in unique(fac))
>>>>  print(apply(m[fac==i,],2,mean))
>>>
>>> This would be a lot simpler and faster:
>>>
>>> colMeans(m[unique(fac),])
>>>
>>> #[1]  1.3595197 -0.1374411  0.1062527 -0.3897732
>>>
>>
>> Say what??? (I suspect David needs to get his sleep - or coffee, if he is
>> in Europe.)
>
> At that point it was sleep that I needed. Now ....  trying to decide if I
> should just go back to bed or make coffee.
>
>>
>> How about:
>>
>>> aggregate(m,list(fac),mean)
>>
>>  Group.1          V1         V2         V3           V4
>> 1       1 -0.03785420 -0.2573805 -0.3025759  0.006999996
>> 2       2 -1.39961300  0.2296900 -0.1122359 -0.302734531
>> 3       3  0.50886649  0.6546153 -0.4270368 -0.411807709
>>>
>>> by(m,list(fac),colMeans)
>>
>> : 1
>>         V1           V2           V3           V4
>> -0.037854195 -0.257380542 -0.302575901  0.006999996
>> -------------------------------------------------------------
>> : 2
>>       V1         V2         V3         V4
>> -1.3996130  0.2296900 -0.1122359 -0.3027345
>> -------------------------------------------------------------
>> : 3
>>       V1         V2         V3         V4
>> 0.5088665  0.6546153 -0.4270368 -0.4118077
>>>
>>
>>
>>
>> --
>> Peter Dalgaard
>>
>
> David Winsemius, MD
> West Hartford, CT
>
>



More information about the R-help mailing list