¿Cómo obtener filas, por grupo, de marco de datos con la marca de tiempo más temprana?

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')

Quiero encontrar una operación que produzca las filas completas que contienen la marca de tiempo mínima por grupo, en este caso,

group         ts letter
    1 2013-02-01      e
    4 2014-02-02      f
    2 2014-02-11      d
    3 2014-02-11      i

Una solución base R rápida y sucia (y lenta) sería

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,]

Intuitivamente, creo que si hubiera una manera de agregar un índice de orden por grupo, entonces podría filtrar a donde el valor de esa columna es 1, pero no estoy seguro de cómo ejecutarlo sin muchos subconjuntos y reincorporaciones.

Respuestas a la pregunta(3)

Su respuesta a la pregunta