Wie werden Datenrahmenzeilen nach Gruppen mit dem frühesten Zeitstempel abgerufen?
df <- data.frame(group=c(1,2,4,2,1,4,2,3,3),
ts=c("2014-02-13","2014-06-01","2014-02-14","2014-02-11","2013-02-01","2014-02-02","2014-03-21","2014-12-01","2014-02-11"),
letter=letters[1:9])
df$ts <- as.Date(df$ts,format='%Y-%m-%d')
Ich möchte eine Operation finden, die die vollständigen Zeilen mit dem minimalen Zeitstempel pro Gruppe erzeugt. In diesem Fall
group ts letter
1 2013-02-01 e
4 2014-02-02 f
2 2014-02-11 d
3 2014-02-11 i
Eine schnelle und schmutzige (und langsame) Basis-R-Lösung wäre
dfo <- data.frame(df[order(df$ts,decreasing=F),],index=seq(1:nrow(df)))
mins <- tapply(dfo$index,dfo$group,min)
dfo[dfo$index %in% mins,]
Intuitiv denke ich, wenn es eine Möglichkeit gibt, einen Ordnungsindex nach Gruppe hinzuzufügen, könnte ich einfach filtern, wo der Wert dieser Spalte 1 ist, aber ich bin mir nicht sicher, wie ich ihn ausführen soll, ohne viel Teilmenge und Wiedereinstieg.