
The {normalize} R package offers convenient
tools to normalize numeric data from common R objects (i.e., to subtract
the mean and to divide by the standard deviation):
works for vector, matrix,
data.frame, ts, and list
objects
can normalize by row or by column
can ignore rows or columns when normalizing
allows for joint normalizing of rows or columns
provides the normalizing constants as attributes
preserves object attributes
You can install the released version from CRAN with:
install.packages("normalize")Normalize a vector by centering, scaling, or both. The
centering and scaling values used are stored in the
"center" and "scale" attributes.
x <- 1:10
normalize(x)
#> [1] -1.4863011 -1.1560120 -0.8257228 -0.4954337 -0.1651446 0.1651446
#> [7] 0.4954337 0.8257228 1.1560120 1.4863011
#> attr(,"center")
#> [1] 5.5
#> attr(,"scale")
#> [1] 3.02765
normalize(x, center = FALSE)
#> [1] 0.3302891 0.6605783 0.9908674 1.3211565 1.6514456 1.9817348 2.3120239
#> [8] 2.6423130 2.9726022 3.3028913
#> attr(,"scale")
#> [1] 3.02765
normalize(x, scale = FALSE)
#> [1] -4.5 -3.5 -2.5 -1.5 -0.5 0.5 1.5 2.5 3.5 4.5
#> attr(,"center")
#> [1] 5.5Normalize a matrix column-wise, optionally with joint
normalization of columns, which then share one centering and one scaling
value:
normalize(
matrix(1:12, nrow = 3, ncol = 4),
jointly = list(1:2, 3:4) # joint normalization of columns 1, 2 and 3, 4
)
#> [,1] [,2] [,3] [,4]
#> [1,] -2.5 0.5 -2.5 0.5
#> [2,] -1.5 1.5 -1.5 1.5
#> [3,] -0.5 2.5 -0.5 2.5
#> attr(,"center")
#> [1] 3.5 3.5 9.5 9.5
#> attr(,"scale")
#> [1] 1 1 1 1Normalize a data.frame while keeping non-numeric columns
unchanged:
normalize(
data.frame(a = 1:3, b = c("A", "B", "C"), c = 7:9, d = 10:12),
ignore = 2 # ignore character column 2 for normalization
)
#> a b c d
#> 1 -1 A -1 -1
#> 2 0 B 0 0
#> 3 1 C 1 1Normalize a time series (class ts) while keeping its
time series properties:
normalize(ts(c(1, 3, 5, 7), start = c(2000, 1), frequency = 4))
#> Qtr1 Qtr2 Qtr3 Qtr4
#> 2000 -1.1618950 -0.3872983 0.3872983 1.1618950Can work on a list:
normalize(list(1:5, diag(3), data.frame(a = 1:3, b = 2:4)))
#> [[1]]
#> [1] -1.2649111 -0.6324555 0.0000000 0.6324555 1.2649111
#> attr(,"center")
#> [1] 3
#> attr(,"scale")
#> [1] 1.581139
#>
#> [[2]]
#> [,1] [,2] [,3]
#> [1,] 1.1547005 -0.5773503 -0.5773503
#> [2,] -0.5773503 1.1547005 -0.5773503
#> [3,] -0.5773503 -0.5773503 1.1547005
#> attr(,"center")
#> [1] 0.3333333 0.3333333 0.3333333
#> attr(,"scale")
#> [1] 0.5773503 0.5773503 0.5773503
#>
#> [[3]]
#> a b
#> 1 -1 -1
#> 2 0 0
#> 3 1 1