2016-04-05 7 views
0

Ich bin interessiert, die quantile Funktion einer Spalte in einem Datenrahmen für nur eine Teilmenge der Zeilen basierend auf einer anderen Spalte zu berechnen.In R wie bestimmte Zeilen auszuschließen, wenn Quantil() berechnet

Zum Beispiel habe ich eine new_user_indicator Spalte mit "Y" oder "N", und wollen das Quantil für "Y" Gruppe kennen. Zur Zeit mache ich

quantile(subset_df$limit_amount, .25) 
subset_df <- subset(carddata, new_user_indicator == "Y") 

Gibt es eine Möglichkeit, dies eher in einem Befehl zu tun, als ein subsetted Datenrahmen zu schaffen?

Ich schaute auf this, um zu sehen, ob es helfen konnte, aber war nicht in der Lage, einen Teil des Codes zu entschlüsseln.

Vielen Dank

+0

Wie wäre es mit 'Quantil (Teilmenge (carddata, new_user_indicator ==" Y ") $ limit_amount, .25)'? – Frank

Antwort

1

Die Quantil-Funktion selbst erlaubt es nicht, auf einer Teilmenge zu arbeiten. Sie benötigen also eine Möglichkeit, um Teilmengen zu extrahieren.

Es wird jedoch nicht empfohlen, einen Teilmengen-Datenrahmen zu extrahieren, wie Sie es getan haben. quantile akzeptiert einen Vektor, so dass Sie nur eine Spalte und nicht den gesamten Datenrahmen unterteilen müssen.

quantile(with(carddata, limit_amount[new_user_indicator == "Y"]), 0.25) 

Die with Funktion hilft Extrakt Spalte, sonst müssen Sie

quantile(carddatal$imit_amount[carddata$new_user_indicator == "Y"], 0.25) 

Update

Wenn Sie dies immer wieder tun, dann schreiben Sie eine Funktion (Funktion Namensänderung foo zu Ihrem Favoriten)

foo <- function(df, out_var, in_var, in_level, prob) { 
    quantile(df[[out_var]][df[[in_var]] == in_level], prob) 
    } 

Dann können Sie tun:

foo(carddata, "limit_amount", "new_user_indicator", "Y", 0.25) 

Ich gehe davon aus Sie eine andere Ebene "N", also für diese Ebene Sie

foo(carddata, "limit_amount", "new_user_indicator", "N", 0.25) 

hier tun können, out_var sind in_var Spaltennamen (daher eine Zeichenkette) für die Ausgangsvariable eine Eingangsvariable. in_level ist die Ebene für die Eingabevariable. Und Sie wissen, was prob ist.


eine leistungsfähigere Weise

Wenn Sie ein 0,25 für alle Ebenen der Eingangsgröße wollen, dann meine Funktion ist noch dumm. Verwenden tapply

tapply(carddata$limit_amount, cardata$new_user_indicator, FUN = quantile, prob = 0.25) 

tapply(x1, x2, FUN, ...) gelten quantile(x1, ...) bis nach x2. Wenn Sie 10 Stufen in x2 haben, erhalten Sie 0,25 Quantil für alle von ihnen.

+0

Cool! Danke für die Details, die Sie zur Verfügung gestellt haben.Ich werde testen, dann genehmigen, aber ich schätze die Informationen, die Sie zur Verfügung gestellt haben. – Jazzmine

+0

Test funktionierte gut. Danke für Ihre Hilfe. – Jazzmine

Verwandte Themen