11
votes

Binning une variable numérique

J'ai un vecteur x qui contient des nombres positifs que je veux bin / discrétiser. Pour ce vecteur, je veux que les chiffres [0, 10) se présentent exactement comme ils existent dans le vecteur, mais les chiffres [10, ∞) doivent avoir 10 ans et plus.

J'utilise: P>

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))


2 commentaires

Qu'est-ce qui est kludgy à ce sujet? Ça me semble très soigné.


@ROB: Le principal inconvénient de cette approche est que vous ne recevez pas de niveaux de facteurs créés pour les valeurs qui ne sont pas là (par exemple, pour ces données, il n'y a pas de niveau "6"). Cela pourrait être corrigé avec des niveaux explicites dans l'appel à facteur .


3 Réponses :


22
votes

Comment sur couper : xxx

quels rendements: xxx


3 commentaires

Cela semble plus compliqué que la solution dans la question.


Améliorations mineures: Swap 1E6 avec Inf . Vous n'avez pas besoin include.lowest = true . (Comparez les réponses en appelant table (binned.x) .


@ROB: Oui, je ne peux pas dire que je suis en désaccord :) @Richie: merci! J'apprends toujours la langue, de sorte que vos "améliorations mineures" sont une aide majeure pour moi.



7
votes

Votre question est incompatible.
Dans la description 10 code> appartient au groupe "10+", mais dans le code 10 code> est un niveau séparé. Si 10 code> doit être strud> dans le groupe "10+", le code doit être xxx pré>

dans ce cas, vous pouvez tronquer les données à 10 (Si vous ne voulez pas de facteur): P>

pmin(x, 10)
# [1]  0  1  3  4  2  4  2  5 10 10 10  2 10  2 10  3  4  2 10


0 commentaires

3
votes
x[x>=10]<-"10+"
This will give you a vector of strings. You can use as.numeric(x) to convert back to numbers ("10+" become NA), or as.factor(x) to get your result above.Note that this will modify the original vector itself, so you may want to copy to another vector and work on that.

0 commentaires