Pergunta

Eu tenho um vetor x que contém números positivos que eu quero bis/discretizar. Para este vetor, quero que os números [0, 10) apareçam exatamente como existem no vetor, mas os números [10, ∞) são 10+.

Estou a usar:

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

Mas isso parece klugey para mim. Alguém conhece uma solução melhor ou uma abordagem diferente?

Foi útil?

Solução

Que tal cut:

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

Que produz:

 # [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+

Outras dicas

Sua pergunta é inconsistente.
Na descrição 10 pertence ao grupo "10+", mas em código 10 é o nível separado. Se 10 deve estar no grupo "10+", então você deve ser

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

Nesse caso, você pode truncar dados para 10 (se não quiser um fator):

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+"

Isso lhe dará um vetor de cordas. Você pode usar as.numeric(x) para converter de volta aos números ("10+" se tornar NA), ou as.factor(x) Para obter seu resultado acima.

Observe que isso modificará o próprio vetor original; portanto, você pode copiar para outro vetor e trabalhar nisso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top