¿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.