Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Function that converts a vector of numbers to a vector of standard units

Is there a function that given a vector of numbers, returns another vector with the standard units corresponding to each value?

where standard unit: how many SDs a value is + or - from the mean

Example:

 x <- c(1,3,4,5,7)    # note: mean = 4, sd = 2
 foo(x) 
 [1]  -1.5  -0.5  0.0  0.5  1.5

Is this fictitious "foo" function already included in a package?

like image 936
jd. Avatar asked Apr 29 '11 17:04

jd.


3 Answers

yes, scale():

x <- c(1,3,4,5,7)
scale(x)
like image 148
Sacha Epskamp Avatar answered Nov 15 '22 21:11

Sacha Epskamp


The function you are looking for is scale.

scale(x)


           [,1]
[1,] -1.3416408
[2,] -0.4472136
[3,]  0.0000000
[4,]  0.4472136
[5,]  1.3416408
attr(,"scaled:center")
[1] 4
attr(,"scaled:scale")
[1] 2.236068

Note that the answers are not identical to what you posted in your question. The reason is that the standard deviation in your x is actually 2.23, not 2.

sd(x)
[1] 2.236068
like image 33
Andrie Avatar answered Nov 15 '22 22:11

Andrie


How about simply (x-mean(x))/sd(x), or am I missing some subtlety here?

like image 5
NPE Avatar answered Nov 15 '22 22:11

NPE