2010-04-15 17 views
9

Ich habe ein Datenframe mit einer Spalte von ganzen Zahlen, die ich als eine Referenz verwenden möchte, um eine neue kategoriale Variable zu machen. Ich möchte die Variable in drei Gruppen aufteilen und die Bereiche selbst festlegen (zB 0-5, 6-10 usw.). Ich versuchte , aber das teilt die Variable in Gruppen basierend auf einer normalen Verteilung und meine Daten sind richtig verzerrt. Ich habe auch versucht, if/then Anweisungen zu verwenden, aber dies gibt einen wahren/falschen Wert aus und ich möchte meine ursprüngliche Variable behalten. Ich bin mir sicher, dass es einen einfachen Weg dafür gibt, aber ich kann es nicht herausfinden. Irgendwelche Ratschläge auf einfache Art und Weise, dies schnell zu tun?Erstellen kategoriale Variable in R basierend auf Bereich

Ich hatte so etwas im Sinn:

x x.range 
3 0-5 
4 0-5 
6 6-10 
12 11-15 

Antwort

12

Ians Antwort ( geschnitten) ist die häufigste Art und Weise, dies zu tun, soweit ich weiß.

Ich ziehe Schindel, vom Lattice Paket

das Argument zu verwenden, die die Klassierungs Intervalle gibt ein wenig mehr intuitiv zu mir scheint.

Sie verwenden Schindel wie so:

# mock some data 
data = sample(0:40, 200, replace=T) 

a = c(0, 5);b = c(5,9);c = c(9, 19);d = c(19, 33);e = c(33, 41) 

my_bins = matrix(rbind(a, b, c, d, e), ncol=2) 

# returns: (the binning intervals i've set) 
     [,1] [,2] 
[1,] 0 5 
[2,] 5 9 
[3,] 9 19 
[4,] 19 33 
[5,] 33 41 

shx = shingle(data, intervals=my_bins) 

#'shx' at the interactive prompt will give you a nice frequency table: 
# Intervals: 
    min max count 
1 0 5 23 
2 5 9 17 
3 9 19 56 
4 19 33 76 
5 33 41 46 
+1

Nizza Lösung, wenn Sie sich die Mühe einer Matrix von Min- und Max-Werte einzustellen. Dies kann mühsam sein, wenn Sie einen dynamischen Bereich haben. –

+0

@ Roman, ich habe genau darüber nachgedacht. Ich habe ein ähnliches Problem mit dynamischen Bereichen. Haben Sie Vorschläge, wie Sie in diesem Fall vorgehen? – PikkuKatja

16
x <- rnorm(100,10,10) 
cut(x,c(-Inf,0,5,6,10,Inf)) 
Verwandte Themen