Skip to content
Prev 314447 / 398503 Next

translate grouped data to their centroid

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.

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