Andrey wrote on 10/13/2011 08:40:21 AM:
> 
>  Dear All,
> 
>  For a vector, I use this
> 
>   xu<-1:20
>   t<-rep((1:4),each=5)
>   tapply(xu,t,mean)
>   1  2  3  4
>   3  8 13 18
> 
>  and for a matrix the only way I may guess is:
>  > xu
>       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
>  [1,]    1    4    3    2    1    4    3    2
>  [2,]    2    1    4    3    2    1    4    3
>  [3,]    3    2    1    4    3    2    1    4
>  [4,]    1    4    3    2    1    4    3    2
>  [5,]    2    1    4    3    2    1    4    3
>  [6,]    3    2    1    4    3    2    1    4
> > t
>  [1] 1 1 1 2 2 2
> > y
>         [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
>  [1,]    0    0    0    0    0    0    0    0
>  [2,]    0    0    0    0    0    0    0    0
> 
>  > for (i in 1:dim(xu)[2]) y[,i]<-tapply(xu[,i],t,mean)
>  > y
>         [,1]        [,2]         [,3]  [,4] [,5]         [,6] [,7]
> [,8]
>  [1,]    2 2.333333 2.666667    3    2 2.333333 2.666667    3
>  [2,]    2 2.333333 2.666667    3    2 2.333333 2.666667    3
> 
> I do not like the need to create a matrix (y) for the result.
> Is there a better way?
> 
> Thanks,
> Andrei.


apply(xu, 2, tapply, t, mean)

Jean
        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to