2017-06-29 4 views
0

Ich arbeite gerade an einem Projekt, wo ich einen riesigen Datenrahmen habe, 16196 obs von 25 Variablen. Das Ziel besteht darin, Ausreißer zu eliminieren, die sich im Datenrahmen für jede spezifische Behandlung befinden könnten. Das Problem ist, dass die Säule mit den Behandlungen jede Behandlung dort hat und jede Behandlung eine andere Dauer hat. Lass mich dir ein Beispiel zeigen.Dekonstruieren einer Spalte in R durch Abgleichen ähnlicher Zeilen?

val_lvl2: chr "Cervical Fusion (Spondylodese)" "nicht-chirurgische Behandlung" "nicht-chirurgische Behandlung" "nicht-chirurgische Behandlung" ...

prd_num_of_days_num: num 167 46 46 46 46 46 46 167 167 46 ...

Ausgang ist von str (z_combined_cost_dtrmnt)

Wir, dass val_lvl2 die Behandlungen alle (100+ nicht gezeigt) hat sehen können. Und prd_num_of_days_num hat die Länge dieser spezifischen Behandlung. Nun, was ich tun möchte, ist die Kombination der "Cervical Fusion" -Daten und der "Non-Surgical Treatment" -Daten in eigene kleine Datenrahmen. Danach möchte ich ein 95% iges Vertrauen in die Länge der Behandlungen schaffen und dann alle Datenzeilen entfernen, die nicht in dieses CI fallen. Dann bringen Sie die Datenframes zurück, so dass wir wieder eine große haben, aber die Ausreißer in jeder Behandlung sind weg.

Ich würde jede Hilfe zu schätzen wissen, da ich wirklich nicht weiß, wo ich anfangen soll, da es keinen einfachen Weg zu geben scheint, den Datenrahmen so zu zerlegen, wie ich es möchte.

Derzeit über die Verwendung der Aggregatfunktion nachdenken.

agg < - Aggregat (z_combined_cost_dtrmnt $ prd_num_of_days_num, durch = list (val_lvl2 = z_combined_cost_dtrmnt $ val_lvl2) von = list (val_lvl3 = z_combined_cost_dtrmnt $ val_lvl3) FUN = SD)

jedoch, die diesen Fehler gibt: Fehler in aggregate.data.frame (as.data.frame (x), ...): formales Argument "durch" durch mehrere tatsächliche Argumente angepasst

TL/DR

Big Data Frame ->

Kleinere Daten Fram Es basiert auf eindeutigen Werten in val_lvl2 unter Berücksichtigung, dass es ähnliche eindeutige Werte gibt, dh mehrere Instanzen von "Cervical Fusion" sollten im selben kleinen Datenrahmen sein ->

Erstellen Sie ein 95% CI basierend auf dem prd_num_of_days_num (length die Behandlung) für jeden Rahmen kleinen Daten - außerhalb CI>

der gesamte Zeile für jeden eindeutigen Wert entfernen, wenn prd_num_of_days_num ist ->

ohne Ausreißer in einen großen Datenrahmen wieder kleinen Datenrahmen verschmelzen.

+1

Willkommen bei Stackoverflow in R. zu organisieren.Bitte geben Sie eine [MCVE] –

+0

Hey @ StevenBeaupré! Meine derzeitige Idee ist, möglicherweise zu aggregieren. Hier ist, was ich bisher habe. agg <- Aggregat (z_combined_cost_dtrmnt $ prd_num_of_days_num, durch = list (val_lvl2 = z_combined_cost_dtrmnt $ val_lvl2) von = list (val_lvl3 = z_combined_cost_dtrmnt $ val_lvl3) FUN = SD) jedoch das gibt diesen Fehler: Fehler in Aggregate .data.frame (as.data.frame (x), ...): formales Argument "by" mit mehreren tatsächlichen Argumenten übereinstimmen – nazgulian

Antwort

0

Sie haben also einen Datenrahmen (df) mit 25 Variablen und möchten ihn in X kleinere Datenrahmen zerlegen, wobei x die Anzahl der einzelnen Behandlungen ist, von denen jede die restlichen 24 Variablen enthält, aber nur eine enthält Art der Behandlung. Richtig?

treatment1 <- df[df$val_lvl2 == "Cervical Fusion (Spinal Fusion)"] 
treatment2 <- df[ds$val_lvl2 =="Non-Surgical Treatment"] 
# etc... 

Es gibt prägnante und ‚besser‘ Möglichkeiten, es zu tun, aber ich denke, das ist, wo Sie sollten ein Gespür dafür zu bekommen, beginnen, wie Daten

+0

Ja genau! Ich hatte wirklich darüber nachgedacht, was du gerade gemacht hast. Aber da es in Val_lvl2 ungefähr 150 Behandlungen gibt, habe ich gehofft, vielleicht etwas effizienter und allgemein zu finden. Etwas, das diesem Weg folgen würde. Big Data Frame -> Kleinere Datenrahmen basierend auf eindeutig val_lvl2 -> Erstellen Sie 95 CI auf prd_num_of_days_num für jeden kleinen Datenrahmen -> Gesamte Zeile entfernen, wenn prd_num_of_days_num außerhalb von CI -> kleine Datenrahmen ohne Ausreißer zusammenführen in einen großen Datenrahmen wieder. Nicht sicher, warum der Text nicht absperrt, wie ich es auch will ... – nazgulian

+0

Tut mir leid, aber es ist ein bisschen schwer, meinen Kopf darum zu wickeln, was genau Sie erreichen möchten. Ich schlage vor, dass Sie diesen Beitrag löschen und einen neuen mit einem kleinen Beispielcode erstellen, der einfach repliziert werden kann. Um zu tun, was ich oben für alle Ihre Fälle auf schnelle Weise getan habe, versuchen Sie Folgendes: 'treatments <- unique (df $ val_lvl2) für (i in c (1: Länge (Behandlungen))) { zuweisen (einfügen ("df_", Behandlungen [[i]], sep = ''), df [df == Behandlungen [[i]]) } ' – 20salmon

+0

Danke! Ich werde sehen, wohin dieser kleine Ausschnitt mich bringt und zurück zu diesem Board, wenn ich aus dem, was gepostet wurde, keine Lösung herausquetschen kann. Es ist ein wenig kompliziert, also schätze ich die Mühe! – nazgulian

Verwandte Themen