[R] Centering data frame by factor

ronny ronny.rechtman at evogene.com
Tue Jul 19 10:43:56 CEST 2011


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-tp3677609p3677609.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list