2011-10-19 12 views
5

Ecco un esempio:Come modificare i dati del rapporto discreto in dati ordinali in R?

height 
1 1.5 
2 1.3 
3 1.9 
4 1.5 
5 1.6 

ci sono 1000 dei quali con altezza compresa tra 0 e 1.9. E voglio tagliarli in 3 livelli: basso, medio e alto. Quindi sono dati ordinali.

risultato dovrebbe essere simile a questo:

height 
1 medium 
2 low 
3 high 
4 medium 
5 medium 

e la sintesi dovrebbe essere simile:

 height 
low: 203 
medium: 723 
high: 74 

ho cercato di utilizzare il ciclo, ma poi "bassa, media e alta" sono personaggi, non livelli. Ecco come ho fatto la parte bassa:

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

Non hai detto la più importante - come queste categorie dovrebbero essere definite – TMS

risposta

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

+1 per utilizzare l'esempio di riepilogo dell'OP come sostituto per le informazioni più importanti, che l'OP ha mancato nella domanda :-) – TMS

2

cut sarà, abbastanza comodamente, tagliare i vostri dati.

# 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: questo renderà gli intervalli in base < = 1.5, < = 1,9. Se si desidera che gli intervalli siano < 1.5, < 1.9, specificare 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