Many thanks for your most helpful answers.

Tony Lancaster

On 18 November 2010 20:28, David Winsemius <dwinsemius@comcast.net> wrote:

>
> 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@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
>
>

	[[alternative HTML version deleted]]

