Pregunta

Tengo un vector X que contiene los números positivos que quiero bin / discretizar. Para este vector, quiero que los números [0, 10) para aparecer tal y como existen en el vector, pero los números [10, ∞) para ser 10+.

Estoy usando:

x <- c(0,1,3,4,2,4,2,5,43,432,34,2,34,2,342,3,4,2)
binned.x <- as.factor(ifelse(x > 10,"10+",x))

Pero ésto se siente klugey a mí. ¿Alguien sabe una mejor solución o un enfoque diferente?

¿Fue útil?

Solución

¿Qué hay de cut:

binned.x <- cut(x, breaks = c(-1:9, Inf), labels = c(as.character(0:9), '10+'))

Lo que se obtiene:

 # [1] 0   1   3   4   2   4   2   5   10+ 10+ 10+ 2   10+ 2   10+ 3   4   2  
 # Levels: 0 1 2 3 4 5 6 7 8 9 10+

Otros consejos

pregunta es inconsistente.
En la descripción 10 pertenece a "10+" grupo, pero en 10 código se separa nivel. Si 10 debe estar en el "10+" grupo entonces código debe ser

as.factor(ifelse(x >= 10,"10+",x))

En este caso se podría truncar los datos a 10 (si no desea que un factor):

pmin(x, 10)
# [1]  0  1  3  4  2  4  2  5 10 10 10  2 10  2 10  3  4  2 10
x[x>=10]<-"10+"

Esto le dará un vector de cadenas. Puede utilizar as.numeric(x) convertir de nuevo a los números ( "10+" NA convertido), o as.factor(x) para obtener su resultado anterior.

Tenga en cuenta que esto va a modificar el propio vector original, por lo que puede copiar en otro vector y trabajar en eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top