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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top