Domanda

Ho un vettore X che contiene i numeri positivi che voglio bin / Discretizza. Per questo vettore, voglio i numeri [0, 10) di presentarsi proprio come esistono nel vettore, ma i numeri [10, ∞) da 10+.

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

, ma questo si sente klugey a me. Qualcuno sa una soluzione migliore o di un approccio diverso?

È stato utile?

Soluzione

Come su cut:

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

che produce:

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

Altri suggerimenti

Si domanda è incoerente.
Nella descrizione 10 appartiene al gruppo "10+", ma nel codice 10 è separato livello. Se 10 dovrebbe essere in "10+" gruppo allora si codice dovrebbe essere

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

In questo caso si potrebbe troncare i dati a 10 (se non si desidera un fattore):

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

Questo vi darà un vettore di stringhe. È possibile utilizzare as.numeric(x) da riconvertire ai numeri ( "10+" diventare NA), o as.factor(x) per ottenere il risultato di cui sopra.

Si noti che questo modificherà il vettore originale in sé, quindi si consiglia di copiare ad un altro vettore e lavorare su questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top