[R] Centering data frame by factor
David Winsemius
dwinsemius at comcast.net
Tue Jul 19 16:11:59 CEST 2011
On Jul 19, 2011, at 4:50 AM, Daniel Malter wrote:
>
> P1-tapply(P1,Experiment,mean)[Experiment]
Another way would be with ave(), but I discovered that it does not
accept subsidiary arguments and does not issue warnings either, so
this works:
> with(dfrm, ave(P1, Experiment, FUN=function(x) scale(x,
scale=FALSE) ) )
[1] -2 0 2 1 -1 0
But this doesn't behave "as directed" ... by my pre-operational R-brain.
with(dfrm, ave(P1, Experiment, FUN=scale, scale=FALSE) )
[1] -1 0 1 1 -1 0
(It applies both default arguments and issues no warning about unused
argument. Most (well, some anyway) functions like this accept
subsidiary arguments with ..., but `ave` uses that construction to
gather its factor arguments rather than expecting them to be in a list
or vector, as do tapply, aggregate, and by. Some functions like mapply
and many other give you a moreArgs option, but not ave.)
--
David.
>
> HTH,
> Daniel
>
>
> ronny wrote:
>>
>> Hi,
>>
>> I would like to center P1 and P2 of the following data frame by the
>> factor
>> "Experiment", i.e. substruct from each value the average of its
>> experiment, and keep the original data structure, i.e. the
>> experiment and
>> the group of each value.
>>
>> RAW=
>> data
>> .frame
>> ("Experiment
>> "=
>> c
>> (2,2,2,1,1,1
>> ),"Group
>> "=
>> c
>> ("A
>> ","A","B","A","A","B"),"P1"=c(10,12,14,5,3,4),"P2"=c(8,12,16,2,3,4))
>>
>> Desired result:
>>
>> NORMALIZED=
>> data
>> .frame
>> ("Experiment
>> "=
>> c
>> (2,2,2,1,1,1
>> ),"Group
>> "=
>> c
>> ("B
>> ","A","B","B","A","B"),"P1"=c(-2,0,2,1,-1,0),"P2"=c(-4,0,4,-1,0,1))
>>
>> I tried using "by", but then I lose the original order, and the
>> "Group"
>> varaible. Can you help?
>>
>>> RAW
>> Experiment Group P1 P2
>> 2 A 10 8
>> 2 A 12 12
>> 2 B 14 16
>> 1 A 5 2
>> 1 A 3 3
>> 1 B 4 4
>>
>> NOT.OK<- within (RAW,
>> {P1<-do.call(rbind,by(RAW$P1,RAW$Experiment,scale,scale=F))})
>>
>>> NOT.OK
>> Experiment Group P1 P2
>> 2 A 1 8
>> 2 A -1 12
>> 2 B 0 16
>> 1 A -2 2
>> 1 A 0 3
>> 1 B 2 4
>>
>
> --
> View this message in context: http://r.789695.n4.nabble.com/Centering-data-frame-by-factor-tp3677609p3677620.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at 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.
David Winsemius, MD
West Hartford, CT
More information about the R-help
mailing list