Binning una variable numérica en R
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?
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.