sweep by levels of a factor
On Nov 18, 2010, at 1:23 PM, Henrique Dallazuanna wrote:
Try this also: x$x - ave(x$x, x$f)
Could also use scale for only its centering capacities:
unlist(
tapply(fx$x, fx$f, scale, scale=FALSE) # default for center == TRUE
)
11 12 21 22 23
1 -1 -2 2 0
... but looking at the code for ave and for tapply makes me think ave
would win in a foot race. scale() has other capacities that make its
availability useful.
David. > > On Thu, Nov 18, 2010 at 12:02 PM, Lancaster, Anthony < > anthony_lancaster at brown.edu> wrote: > >> Hi, >> I'd appreciate help with this. I have a data matrix with one >> column, called >> f in the example below, a factor. I'd like to subtract the means >> from each >> of >> other columns for each level of the factor. That is, in the >> example, to go >> from the first matrix below to the second. I know SWEEP will take out >> means, >> but I want to do this for each level of the factor. >> f x >> 1 2 >> 1 0 >> 2 0 >> 2 4 >> 2 2 >> >> f xnew >> 1 1 >> 1 -1 >> 2 -2 >> 2 2 >> 2 0 >> Thanks >> >> [[alternative HTML version deleted]] >> David Winsemius, MD West Hartford, CT