Standardize (Z-score) a dataframe
[This article was first published on Dominique Makowski, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Standardize / Normalize / Z-score / Scale
The standardize()
function allows you to easily scale and center all numeric variables of a dataframe. It is similar to the base function scale()
, but presents some advantages: it is tidyverse-friendly, data-type friendly (i.e., does not transform it into a matrix) and can handle dataframes with categorical data.
library(psycho) library(tidyverse) z_iris <- iris %>% psycho::standardize() summary(z_iris) Species Sepal.Length Sepal.Width Petal.Length setosa :50 Min. :-1.86378 Min. :-2.4258 Min. :-1.5623 versicolor:50 1st Qu.:-0.89767 1st Qu.:-0.5904 1st Qu.:-1.2225 virginica :50 Median :-0.05233 Median :-0.1315 Median : 0.3354 Mean : 0.00000 Mean : 0.0000 Mean : 0.0000 3rd Qu.: 0.67225 3rd Qu.: 0.5567 3rd Qu.: 0.7602 Max. : 2.48370 Max. : 3.0805 Max. : 1.7799 Petal.Width Min. :-1.4422 1st Qu.:-1.1799 Median : 0.1321 Mean : 0.0000 3rd Qu.: 0.7880 Max. : 1.7064
But beware, standardization does not change (and “normalize”) the distribution!
z_iris %>% dplyr::select(-Species) %>% gather(Variable, Value) %>% ggplot(aes(x=Value, fill=Variable)) + geom_density(alpha=0.5) + geom_vline(aes(xintercept=0)) + theme_bw() + scale_fill_brewer(palette="Spectral")
To leave a comment for the author, please follow the link and comment on their blog: Dominique Makowski.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.