[R] translate grouped data to their centroid

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue Jan 1 21:43:16 CET 2013


On 01/01/2013 19:50, Michael Friendly wrote:
> Given a data set with a group factor, I want to translate the numeric
> variables to their
> centroid, by subtracting out the group means (adding back the grand means).
>
> The following gives what I want, but there must be an easier way using
> sweep or
> apply or some such.

Yes.  It is part of the calculation of within-group covariances in LDA, 
so (from MASS:::lda.default)

     group.means <- tapply(x, list(rep(g, p), col(x)), mean)
     x - group.means[g, ]

shows the idiom.

>
> iris2 <- iris[,c(1,2,5)]
> means <- colMeans(iris2[,1:2])
>
> pooled <- lm(cbind(Sepal.Length, Sepal.Width) ~ Species,
> data=iris2)$residuals
> pooled[,1] <- pooled[,1] + means[1]
> pooled[,2] <- pooled[,2] + means[2]
> pooled <- as.data.frame(pooled)
> pooled$Species <- iris2$Species
>


-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list