Take a look at aggregate . I think you want to.
d <- data.frame(block=c(1,1,1,1,1,1,2,2,2,2), plot=c(1,1,2,2,3,3,1,1,2,2), date=c(rep('aug',5),rep('sep',5)), data=c(11.95171507, 18.41451063, 9.506155236, 13.26259947, 17.53616835, 15.40950767, 23.03616678, 17.07067258, 11.58278798, 13.15443304)) aggregate(x = d$data, by = list(d$block, d$date), FUN = "mean")
source share