2010-04-15 42 views
9

Tengo un marco de datos con una columna de enteros que me gustaría usar como referencia para crear una nueva variable categórica. Quiero dividir la variable en tres grupos y establecer los intervalos por mí mismo (es decir, 0-5, 6-10, etc.). Intenté cut pero eso divide la variable en grupos según una distribución normal y mis datos están sesgados a la derecha. También intenté usar sentencias if/then, pero esto arroja un valor verdadero/falso y me gustaría mantener mi variable original. Estoy seguro de que hay una manera simple de hacerlo, pero parece que no puedo resolverlo. ¿Algún consejo sobre una forma simple de hacer esto rápidamente?Crear una variable categórica en R basada en el rango

que tenía algo en mente la siguiente manera:

x x.range 
3 0-5 
4 0-5 
6 6-10 
12 11-15 

Respuesta

12

respuesta de Ian (cortar) es la forma más común de hacer esto, por lo que sé.

Yo prefiero usar teja, desde el enrejado de paquete

el argumento que especifica los intervalos de agrupación parece un poco más intuitivo para mí.

que utilizan tejas así:

# mock some data 
data = sample(0:40, 200, replace=T) 

a = c(0, 5);b = c(5,9);c = c(9, 19);d = c(19, 33);e = c(33, 41) 

my_bins = matrix(rbind(a, b, c, d, e), ncol=2) 

# returns: (the binning intervals i've set) 
     [,1] [,2] 
[1,] 0 5 
[2,] 5 9 
[3,] 9 19 
[4,] 19 33 
[5,] 33 41 

shx = shingle(data, intervals=my_bins) 

#'shx' at the interactive prompt will give you a nice frequency table: 
# Intervals: 
    min max count 
1 0 5 23 
2 5 9 17 
3 9 19 56 
4 19 33 76 
5 33 41 46 
+1

buena solución si se molestan en establecer una matriz de valores mínimos y máximos. Esto puede ser tedioso si tiene un rango dinámico. –

+0

@ Roman, estaba pensando exactamente en eso. Tengo un problema similar con rangos dinámicos. ¿Tiene alguna sugerencia de cómo proceder en este caso? – PikkuKatja

16
x <- rnorm(100,10,10) 
cut(x,c(-Inf,0,5,6,10,Inf)) 
Cuestiones relacionadas