Функция, которая преобразует вектор чисел в вектор стандартных единиц

Есть ли функция, которая по заданному вектору чисел возвращает другой вектор со стандартными единицами, соответствующими каждому значению?

где стандартная единица: сколько СО значение + или - от среднего

Пример:

 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

Эта фиктивная функция "foo" уже включена в пакет?


person jd.    schedule 29.04.2011    source источник
comment
Ваш sd=2 немного не соответствует... ;-)   -  person Gavin Simpson    schedule 29.04.2011
comment
примечание: в моем примере я использую стандартное отклонение всей совокупности (2), а не выборочное стандартное отклонение (2.23).   -  person jd.    schedule 29.04.2011
comment
Ах, тогда вы должны указать это в своем вопросе, потому что ответы scale() будут работать, только если вы сделаете: scale(x, center=4, scale=2).   -  person Gavin Simpson    schedule 29.04.2011
comment
@gavin: спасибо за полезное разъяснение.   -  person jd.    schedule 29.04.2011


Ответы (3)


да, scale():

x <- c(1,3,4,5,7)
scale(x)
person Sacha Epskamp    schedule 29.04.2011

Функция, которую вы ищете, это 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

Обратите внимание, что ответы не идентичны тому, что вы разместили в своем вопросе. Причина в том, что стандартное отклонение вашего x на самом деле равно 2,23, а не 2.

sd(x)
[1] 2.236068
person Andrie    schedule 29.04.2011

Как насчет просто (x-mean(x))/sd(x), или я упустил какую-то тонкость?

person NPE    schedule 29.04.2011
comment
я понимаю, что это тривиально; просто интересно, является ли это частью пакета, учитывая, что получение этого вектора является промежуточным шагом в одном из наиболее распространенных способов вычисления корреляции - person jd.; 29.04.2011
comment
Почему бы вам просто не использовать cor(). Кроме того, корреляция по определению не зависит от линейных преобразований, поэтому стандартизация двух переменных не имеет значения. - person Sacha Epskamp; 29.04.2011
comment
Синтаксис должен быть таким: (x - mean(x)) / sd(x) важны пробелы (я искал в консоли, например, ?x-mean) - person eamo; 03.09.2013