2017-06-28 2 views
-2

Ich versuche herauszufinden, wie in Azure ML (und daher R-Lösungen sind akzeptabel), Daten auf der Grundlage einer Spalte, so dass alle Datensätze mit einem bestimmten Wert in dieser Spalte auf der einen oder anderen Seite des Spalts enden. Zum Beispiel:Teilen von Daten basierend auf Gruppierungsspalte

+------------+------+--------------------+------+ 
| Student ID | pass | some_other_feature | week | 
+------------+------+--------------------+------+ 
|  1234 | 1 | Foo    | 1 | 
|  5678 | 0 | Bar    | 1 | 
| 9101112 | 1 | Quack    | 1 | 
| 13141516 | 1 | Meep    | 1 | 
|  1234 | 0 | Boop    | 2 | 
|  5678 | 0 | Baa    | 2 | 
| 9101112 | 0 | Bleat    | 2 | 
| 13141516 | 1 | Maaaa    | 2 | 
|  1234 | 0 | Foo    | 3 | 
|  5678 | 0 | Bar    | 3 | 
| 9101112 | 1 | Quack    | 3 | 
| 13141516 | 1 | Meep    | 3 | 
|  1234 | 1 | Boop    | 4 | 
|  5678 | 1 | Baa    | 4 | 
| 9101112 | 0 | Bleat    | 4 | 
| 13141516 | 1 | Maaaa    | 4 | 
+------------+------+--------------------+------+ 

Acceptable Ausgabe von, wenn ich gewählt habe, sagen, 50/50 geteilt und zusammenhängend auf dem Teilnehmer-ID Spalte zwei neue Datensätze würde zu beruhen:

+------------+------+--------------------+------+ 
| Student ID | pass | some_other_feature | week | 
+------------+------+--------------------+------+ 
|  1234 | 1 | Foo    | 1 | 
|  1234 | 0 | Boop    | 2 | 
|  1234 | 0 | Foo    | 3 | 
|  1234 | 1 | Boop    | 4 | 
| 9101112 | 1 | Quack    | 1 | 
| 9101112 | 0 | Bleat    | 2 | 
| 9101112 | 1 | Quack    | 3 | 
| 9101112 | 0 | Bleat    | 4 | 
+------------+------+--------------------+------+ 

und

Nun, von dem, was ich sagen kann, ist dies im Grunde das Gegenteil von geschichteten Split, wo es eine zufällige Probe mit jedem Schüler auf beiden Seiten vertreten würde.

Ich würde eine Azure ML-Funktion bevorzugen, die dies getan hat, aber ich denke, dass das unwahrscheinlich ist, gibt es auch eine R-Funktion oder Bibliothek, die diese Art von Funktionalität gibt? Alles, was ich finden konnte, war questions about stratification, die mir offensichtlich nicht viel helfen.

+1

Die 'unique' Studenten-IDs und Subset-Zeilen mit '% in%' abtasten. – alistaire

+0

@alistaire das macht Sinn, und ich fühle mich ziemlich dumm, wenn ich nicht daran denke:/Wenn du das als Antwort hinzufügen willst, werde ich es akzeptieren – Jeff

Antwort

0

können Sie te folgenden Befehl verwenden:.

data.fold <- mutate(df, fold = sample(rep_len(1:2, n_distinct(Student ID)))[Student ID]) 

Es gibt den ursprünglichen Datenrahmen mit einer neuen Spalte, die die Falte zeigt an, dass der Student in ist Wenn Sie mehr Falten wollen, stellen Sie einfach die ‚1: 2 Teil.

Ich habe versucht, die "Probe einzigartig" Weg, aber es hat nicht immer funktioniert für mich in der Vergangenheit.

Verwandte Themen