Frage

Ich habe einen Vektor X, der positive Zahlen enthält, die ich bin/diskretisieren möchte. Für diesen Vektor möchte ich, dass die Zahlen [0, 10) genau so angezeigt werden, wie sie im Vektor existieren, aber Zahlen [10, ∞) 10+.

Ich benutze:

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

Aber das fühlt sich für mich klebrig an. Kennt jemand eine bessere Lösung oder einen anderen Ansatz?

War es hilfreich?

Lösung

Wie wäre es mit cut:

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

Welche ergibt:

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

Andere Tipps

Ihre Frage ist inkonsistent.
In Beschreibung 10 gehört zur "10+" -Gruppe, aber in Code 10 ist getrennt. Wenn 10 sollte Seien Sie in der Gruppe "10+", dann sollten Sie Code sein

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

In diesem Fall können Sie Daten auf 10 abschneiden (wenn Sie keinen Faktor wünschen):

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

Dies gibt Ihnen einen Vektor von Saiten. Sie können verwenden as.numeric(x) Um konvertieren in Zahlen zurück ("10+" werden werden NA), oder as.factor(x) um Ihr Ergebnis oben zu erzielen.

Beachten Sie, dass dies den ursprünglichen Vektor selbst ändert, sodass Sie möglicherweise in einen anderen Vektor kopieren und daran arbeiten möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top