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.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage