2011-10-19 18 views
5

Aquí es un ejemplo:¿Cómo cambiar los datos de relación discreta en datos ordinales en R?

height 
1 1.5 
2 1.3 
3 1.9 
4 1.5 
5 1.6 

hay 1000 de ellos con la altura que varía de 0 a 1,9. Y quiero cortarlos en 3 niveles: bajo, medio y alto. Entonces son datos ordinales.

resultado debería tener este aspecto:

height 
1 medium 
2 low 
3 high 
4 medium 
5 medium 

Y el resumen debe ser similar:

 height 
low: 203 
medium: 723 
high: 74 

He intentado utilizar el bucle pero entonces "baja, media y alta" son caracteres, no se niveles. Aquí es cómo lo hice la parte baja:

height_cuts = c(1.5,1.9) 
for(i in 1:nrow(health.sample)){ 
    if(is.na(health.sample$height[i])==FALSE){ 
    if(health.sample$height[i] < height_cuts[1]){ 
     health.sample$height[i] = low_h 
    } 
    } 
} 
+0

No ha dicho el más importante - ¿Cómo debería definirse estas categorías – TMS

Respuesta

3
cut(height, quantile(height, prob=c(203, 723, 74)/1000), labels=c("low", "medium", "high")) 
+0

+1 para usar el ejemplo de resumen de OP como sustituto de la información más importante, que el OP perdió en la pregunta :-) – TMS

2

cut será, convenientemente suficiente, cortar sus datos.

# cut needs all endpoints explicitly specified, including outside bounds 
height_cuts <- c(-Inf, 1.5, 1.9, Inf) 

hcut <- cut(height, height_cuts, labels=c("low", "medium", "high")) 

ETA: esto hará intervalos basados ​​en < = 1,5, < = 1,9. Si desea que los intervalos que se < 1.5, 1.9 <, especifique right=FALSE:

hcut <- cut(height, height_cuts, right=FALSE, ...) 
1

Uso cut:

cut(x$height, c(0,1.5,1.9,10), labels=c("low","med","high"), right=FALSE) 
# [1] med low high med med