# scale()

You can use `scale()` to center and/or scale (i.e., Z-score) a vector of numbers.

Z-score a list of numbers

``````x <- c(10, 12, 14, 16, 18)
scale(x)``````
``````##            [,1]
## [1,] -1.2649111
## [2,] -0.6324555
## [3,]  0.0000000
## [4,]  0.6324555
## [5,]  1.2649111
## attr(,"scaled:center")
## [1] 14
## attr(,"scaled:scale")
## [1] 3.162278``````

However, the result contains the mean and SD. This can cause problems if you want to assign it to a new column in a data frame, which you can fix using `as.vector()`

``as.vector(scale(x))``
``## [1] -1.2649111 -0.6324555  0.0000000  0.6324555  1.2649111``

I find it more straightforward to just use the equation for a Z-score

``( x - mean(x) ) / sd(x)``
``## [1] -1.2649111 -0.6324555  0.0000000  0.6324555  1.2649111``

You can just center the numbers without scaling.

``as.vector(scale(x, center=TRUE, scale=FALSE))``
``## [1] -4 -2  0  2  4``
``( x - mean(x) )``
``## [1] -4 -2  0  2  4``

Scaling without centering divides numbers by their root mean square.

``as.vector(scale(x, center=FALSE, scale=TRUE))``
``## [1] 0.6262243 0.7514691 0.8767140 1.0019589 1.1272037``
``x / sqrt(sum(x^2)/(length(x)-1))``
``## [1] 0.6262243 0.7514691 0.8767140 1.0019589 1.1272037``

Set the scale to a number to divide by that number

``as.vector(scale(x, center=FALSE, scale=3))``
``## [1] 3.333333 4.000000 4.666667 5.333333 6.000000``
``x / 3``
``## [1] 3.333333 4.000000 4.666667 5.333333 6.000000``

Create new columns in a dataframe with the scaled or centered variable

``````suppressMessages( library(tidyverse) )
df <- data.frame(id = seq(1,5), x = x)
df.s <- df %>%
mutate(
x.s = as.vector(scale(x)),
x.c = as.vector(scale(x, scale=F)),
x.z = (x - mean(x)) / sd(x)
)
df.s``````
``````##   id  x        x.s x.c        x.z
## 1  1 10 -1.2649111  -4 -1.2649111
## 2  2 12 -0.6324555  -2 -0.6324555
## 3  3 14  0.0000000   0  0.0000000
## 4  4 16  0.6324555   2  0.6324555
## 5  5 18  1.2649111   4  1.2649111``````
##### Lisa DeBruine
###### Professor of Psychology

Lisa DeBruine is a professor of psychology at the University of Glasgow. Her substantive research is on the social perception of faces and kinship. Her meta-science interests include team science (especially the Psychological Science Accelerator), open documentation, data simulation, web-based tools for data collection and stimulus generation, and teaching computational reproducibility.