2017-07-11 4 views
-1

Ich habe hier ein kleines Problem, dass ich wirklich etwas Hilfe zu schätzen weiß. Im Wesentlichen habe ich einen großen Datenrahmen, der so aussieht. BITTE BEACHTEN SIE, DIESER R-CODE IST IN TERMINAL UND NICHT IN R STUDIO!Ausreißer in bestimmten Nischen eines Datenrahmens berechnen? [Complex]

! [Datenrahmen] http://imgur.com/a/ftUZ5

Was ich versuche getrennt zu tun ist, der Datenrahmen durch die einzigartigen val_lvl2 Behandlungen.

Hier ist Code von genau das, was ich tun möchte, aber in einem viel größeren Maßstab.

Funktionscode:

remove_outliers <- function(x, na.rm = TRUE, ...) { 
    qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...) 
    H <- 1.5 * IQR(x, na.rm = na.rm) 
    y <- x 
    y[x < (qnt[1] - H)] <- NA 
    y[x > (qnt[2] + H)] <- NA 
    y 

} 

Code:

holder1 <- subset(z_combined_cost_dtrmnt, val_lvl2 == "Hammer Toe Repair") 

holder1 <- holder1[!(holder1$episode_count <=3),] 

holder1$prd_num_of_days_num <- remove_outliers(holder1$prd_num_of_days_num) 

Dies wird alle der Ausreißer Längen für Hammer Toe Reparatur in val_lvl2 entfernen das ist genau das, was ich will. Allerdings möchte ich diesen Schritt nicht jedes Mal machen, da es einige einzigartige Behandlungen gibt! Nach dem Entfernen aller Ausreißer muss ich auch die NA-Spalten entfernen und alle Daten zurück in den einen Datenrahmen "z_combined_cost_dtrmnt" zusammenführen, der nun alle Ausreißerlängen für jede eindeutige Behandlung in val_lvl2 eindeutig entfernt haben sollte. An dieser Stelle ist der Code oben so weit wie ich mit dem Entfernen der Ausreißer bekommen habe, so würde Hilfe sehr geschätzt werden, weil ich positiv bin, gibt es eine effizientere Möglichkeit, dies zu tun, dann schreibe diesen Code für jede Behandlung!

Hier ist jede einzigartige Behandlung in val_lvl2: [Unique values] http://imgur.com/237OqCs

Antwort

0

Sie können split verwenden, um eine Liste von Datenrahmen von Niveau val_lvl2 ...

holders <- split(z_combined_cost_dtrmnt, z_combined_cost_dtrmnt$val_lvl2) 

Und dann zu schaffen gelten Welche Funktionen Sie auch für jedes Element dieser Liste verwenden möchten, z. B. lapply

holders <- lapply(holders, function(x) x[!x$episode_count <= 3,]) 
holders <- lapply(holders, function(x){ 
        x$prd_num_of_days_num <- remove_outliers(x$prd_num_of_days_num) 
        return(x) }) 

Sie werden mit einer Liste von Datenrahmen am Ende, ein für jede Ebene von val_lvl2.

+0

Ich wusste nicht, dass das ein Befehl war! Vielen Dank! Ist es danach so einfach wie ein Merge (Halter)? – nazgulian

+0

Das war genau das, was ich gesucht habe !!! Ich danke dir sehr!! Für jeden, der auf ein ähnliches Problem stößt, ist es super einfach, die Daten in ein großes Set zu bringen! Verwenden Sie einfach die Funktion do.call. Für mich sah es so aus. z_combined_cost_dtrmnt <- do.call (rbind, Inhaber) – nazgulian

Verwandte Themen