scaleBy {doBy} | R Documentation |
Groupwise scaling and centering of numeric columns in a dataframe. Obtained by first splitting a dataframe and then calling scale on each stratum.
scaleBy(formula, data, center = TRUE, scale = TRUE, details=0)
formula |
Either a two-sided formula or a list. A dot (.) is allowed on both left and right hand side of formula. See 'details' for the meaning of this. |
data |
A dataframe |
center |
If TRUE then data is centered to have mean zero |
scale |
If TRUE then data is scaled to have variance one |
details |
If larger than zero then information about grouping etc. is printed. |
A typical formula is y1+y2~f1+f2
where y1 and y2 are numeric
variables and f1 and f2 can be of any type. For each cross-combination
of the values of f1 and f2, the variables (y1,y2) are centered/scaled.
It is valid to write .~f1+f2
. In this case the variables to be
centered/scaled are taken to be all numeric variables in the dataframe
except those that a listed on the right hand side of the formula.
It is valid to write y1+y2~.
. In this case the stratification
is taken to be by all non-numeric variables. If there are no
non-numeric variables, then no stratification is made and a 'global'
centering/scaling is made.
It is valid to write .~.
. In this case the variables to be
centered/scaled are taken to be all numeric variables in the
dataframe. The stratification is made by all non-numeric variables. If
there are no non-numeric variables, then no stratification is made and a 'global'
centering/scaling is made.
A dataframe with the same columns as the input dataframe, but the scaled / centered values are put into the relevant columns.
Søren Højsgaard, sorenh@math.aau.dk
lapplyBy
,
orderBy
,
splitBy
,
summaryBy
,
transformBy
,
## The following forms are equivalent: scaleBy(conc+rate ~ state, data=Puromycin) scaleBy(list(c("conc","rate"), "state"), data=Puromycin) scaleBy(list(c("."), "."), data=Puromycin) scaleBy(.~., data=Puromycin) ## The same results can be obtained from lapply(splitBy(~state, data=Puromycin), function(.dd) scale(.dd[,sapply(Puromycin,class)=="numeric"])) ## The pig growth data 'dietox' data(dietox) # "Remove the effect of time" by centering data within each time point. dietox2 <- scaleBy(Weight~Time, data=dietox, scale=FALSE) ## Not run: library(lattice) xyplot(Weight~Time|Evit+Cu, groups=Pig, data=dietox) xyplot(Weight~Time|Evit+Cu, groups=Pig, data=dietox2) ## End(Not run)