Ich möchte eine Datentabelle aufteilen, um Datensätze basierend auf ihren Daten und bedingten Werten von zwei anderen Spalten (ID und Typ Variablen) aufzunehmen. Wenn jedoch nur ein Datensatz pro ID vorhanden ist, behalten Sie den Datensatz bei, unabhängig vom Wert der anderen bedingten Spalte oder des Datums.Wenn Spaltenwert dupliziert wird, dann Zeile basierend auf mehreren Bedingungen beibehalten, ansonsten Zeile
Eine Probe meiner Daten sieht wie folgt aus:
dt <- data.table(badge = c("1001", "1001", "1002", "1003", "1003", "1003", "1004", "1004"), location = c("training", "test", "training", "training", "test", "test", "training", "training"), date = as.POSIXct(c("2014-09-21", "2014-10-01", "2014-09-20", "2014-09-15", "2014-11-01", "2014-12-10", "2014-09-09", "2014-09-10")), score = as.numeric(c(3,5,-1,0,1,3,-2,1)))
> dt
badge location date score
1: 1001 training 2014-09-21 3
2: 1001 test 2014-10-01 5
3: 1002 training 2014-09-20 -1
4: 1003 training 2014-09-15 0
5: 1003 test 2014-11-01 1
6: 1003 test 2014-12-10 3
7: 1004 training 2014-09-09 -2
8: 1004 training 2014-09-10 1
Für jedes Abzeichen, ich bin mehr daran interessiert, die Testergebnisse über die Trainings Score (Zeile # 2). Wenn jedoch keine Testergebnisse für ein bestimmtes Badge vorhanden sind, möchte ich die Trainingsbewertung beibehalten (Zeile 3). Wenn mehr als ein Testergebnis pro Abzeichen vorhanden ist, möchte ich das Ergebnis zu dem früheren Datum (Zeile 5) übernehmen. Wenn mehr als ein Trainingsergebnis pro Abzeichen vorhanden ist, aber kein Testergebnis, möchte ich das Ergebnis zu einem späteren Zeitpunkt (Zeile 8) nehmen.
Das Ergebnis sollte wie folgt aussehen:
> dt
badge location date score
2: 1001 test 2014-10-01 5
3: 1002 training 2014-09-20 -1
5: 1003 test 2014-11-01 1
8: 1004 training 2014-09-10 1
Ich habe versucht, Variationen verschiedener dplyr Saiten und subsetting. dt <- dt %>% group_by(badge) %>% filter(location=="test") %>% filter(date == min(date))
ist das nächste, das ich bekommen habe, da es mir die frühesten Testergebnisse per Abzeichen gibt, aber alle Trainingsaufzeichnungen entfernt werden, unabhängig davon, ob es einen Testergebnis für dieses Abzeichen gibt. Ich kann verstehen, warum dieser Code nicht funktioniert, da ich ihn selektiv betrachte, aber ich weiß nicht, wie ich ihn nuancierter gestalten kann, um das gewünschte Ergebnis zu erzielen.
Ich wählte diese Antwort für ihre Einfachheit und Kürze. Vielen Dank! – ktf