Binning une variable numérique en R
Question
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) pour apparaître comme ils existent dans le vecteur, mais les chiffres [10, ∞) pour être 10+.
J'utilise:
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))
mais cela se sent klugey pour moi. Est-ce que quelqu'un sait une meilleure solution ou une approche différente?
La solution
Qu'en est-cut
:
binned.x <- cut(x, breaks = c(-1:9, Inf), labels = c(as.character(0:9), '10+'))
Ce qui donne:
# [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+
Autres conseils
question est incompatible.
Dans la description 10
appartient au groupe « de 10+ », mais dans le code 10
est séparé niveau.
Si 10
devrait dans le groupe "10+" vous code doit être
as.factor(ifelse(x >= 10,"10+",x))
Dans ce cas, vous pouvez tronquer les données à 10 (si vous ne voulez pas un facteur):
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+"
Cela vous donnera un vecteur de chaînes. Vous pouvez utiliser as.numeric(x)
pour reconvertir en nombre ( « 10 + » devenir NA
), ou as.factor(x)
pour obtenir votre résultat ci-dessus.
Notez que cela modifiera le vecteur original lui-même, de sorte que vous pouvez copier à un autre vecteur et le travail sur ce point.