2011-04-29 9 views
9

¿Hay una función en R que, dado un vector de números, devuelva otro vector con las unidades estándar correspondientes a cada valor?R, correlación: hay una función que convierte un vector de nums en un vector de unidades estándar

donde ... unidad estándar: el número de desviaciones estándar de un valor es + o - de la media

Ejemplo:

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

Es éste (ficticio) "su" Func ya incluido en una ¿paquete?

Gracias.

+1

Su sd = 2 es un poco fuera ... ;-) –

+0

nota: en mi ejemplo estoy usando de la población completa SD (2), no la muestra SD (2.23). –

+1

Ah, entonces debería decirlo en su Q, porque las respuestas 'scale()' solo funcionarán si lo hace: 'scale (x, center = 4, scale = 2)'. –

Respuesta

17

sí, scale():

x <- c(1,3,4,5,7) 
scale(x) 
4

¿Qué tal si simplemente (x-mean(x))/sd(x), o me falta algo de sutileza aquí?

+0

me doy cuenta de que es trivial; Me pregunto si es parte de un paquete dado que obtener este vector es un paso intermedio en una de las formas más comunes de calcular la correlación –

+0

¿Por qué no utiliza 'cor()'. Además, la correlación es, por definición, independiente de las transformaciones lineales, por lo que la estandarización de dos variables primero no hace ninguna diferencia. –

+1

La sintaxis debería ser: "espacios (x - mean (x))/sd (x)" son importantes (estaba buscando en la consola como lo hace? X-mean) – eamo

10

La función que está buscando es 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 

Tenga en cuenta que las respuestas no son idénticas a las que publicó en su pregunta. La razón es que la desviación estándar en su x 2,23 es en realidad, no 2.

sd(x) 
[1] 2.236068 
Cuestiones relacionadas