Вы можете получить более высокую производительность, просто используя парадигму base-R lapply(split(.))
с нужными вам функциями.
dat <- structure(list(category = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("A",
"B", "C"), class = "factor"), year = c(2000, 2001, 2004, 2005,
2009, 2010, 2000, 2001, 2004, 2005, 2009, 2010, 2000, 2001, 2004,
2005, 2009, 2010), incidents = c(7, 4, 4, 2, 3, 1, 6, 3, 5, 2,
2, 5, 2, 1, 4, 4, 2, 1)), .Names = c("category", "year", "incidents"
), row.names = c(NA, -18L), class = "data.frame")
split(dat, dat$category)
lapply( split(dat[-1], dat$category), summary)