2014-04-18 20 views
5

Ich möchte eine numerische Variable in meinem data.frame Objekt mit der Verwendung von dplyr kategorisieren (und habe keine Ahnung, wie es geht).R dplyr - kategorisieren numerische Variable mit muate

Ohne dplyr, würde ich wahrscheinlich so etwas wie tun:

df <- data.frame(a = rnorm(1e3), b = rnorm(1e3)) 
df$a <- cut(df$a , breaks=quantile(df$a, probs = seq(0, 1, 0.2))) 

und es würde geschehen. Allerdings bevorzuge ich es sehr, es mit der Verwendung von einigen dplyr Funktion (mutate, nehme ich an) in der chain Reihenfolge der anderen Aktionen, die ich über meine data.frame durchführen.

+1

Bei einer Vermutung (von Google und das Online-Handbuch zu lesen, habe ich noch nie benutzt 'dplyr') Ich würde sagen,' mutieren (df, a = Schnitt (a , Brüche = Quantil (a, probs = seq (0, 1, 0.2)))) ... –

+0

Nein =) 'df%.% mutieren (df, a = schneiden (a, Brüche = Quantil (a, probs = seq (0,1,0,2)))) 'returns' Fehler: nicht unterstützter Typ für Spalte 'df' (VECSXP, classes = data.frame) ' –

+0

Mea culpa! In Eile habe ich vergessen, 'df' im' mutate' zu ​​entfernen, während ich '%.%' 'Chain' Sequenz benutze ... Meine Entschuldigung und danke! –

Antwort

13
set.seed(123) 
df <- data.frame(a = rnorm(10), b = rnorm(10)) 

df %>% mutate(a = cut(a, breaks = quantile(a, probs = seq(0, 1, 0.2)))) 

geben:

    a   b 
1 (-0.586,-0.316] 1.2240818 
2 (-0.316,0.094] 0.3598138 
3  (0.68,1.72] 0.4007715 
4 (-0.316,0.094] 0.1106827 
5  (0.094,0.68] -0.5558411 
6  (0.68,1.72] 1.7869131 
7  (0.094,0.68] 0.4978505 
8    <NA> -1.9666172 
9 (-1.27,-0.586] 0.7013559 
10 (-0.586,-0.316] -0.4727914 
+0

Was ist der 'dplyr' Vorteil von' df%.% Muate (a = ...) 'über' df <- mutate (df, a = ...) '. Ändert sich durch Bezugnahme der erste Weg? –

+0

Wenn Sie meinen, was ist der Unterschied zwischen 'df%.% Mutate (a = ...)' und 'mutate (df, a = ...)' es ist nur ein Stil Problem, aber der erste scheint der bevorzugte zu sein . –

+1

Es verbessert die Lesbarkeit, während Sie eine Reihe von Aktionen über eine "data.farme" ausführen - anstatt geschachtelte Funktionen zu verwenden, können Sie sie sequentiell mit%.% Schreiben und - also - Code in einem * from- lesen von links nach rechts * (nicht: * von-innen nach-außen *). Mehr hier: http://blog.rstudio.org/2014/01/17/introducing-dplyr/ –