Moyenne de n lignes

J'ai un dataframe avec trois colonnes: Id, Date et Value et souhaitez sous-échantillonner cette moyenne: prendre la prochaine à 20 lignes, construire moyenne de Value de ces 20 lignes et l'ajouter à un nouveau dataframe avec la même structure. Date devrait être la première valeur de 20 lignes.

J'ai essayé de cette façon (sans doute horrible :):

resample.downsample <- function(data, by=20)
{
  i <- 0
  nmax <- nrow(data)
  means <- c()
  while(i < nmax)
  {
    means <- c(means, mean(subset(data, Id > i & Id <= i+by)$Value))
    i <- i+by
  }
  return (
    data.frame(
      Id = seq(1, length.out=(nmax/by), by=1),
      Date = seq(startDate, length.out=(nmax/by), by=(1/by)), 
      Value = means  
    )
  )
}

Cela fonctionne donc pour les petits jeux de données, mais fonctionne toujours sur mon jeux de données (~4000000 lignes). Toutes les idées comment optimiser cette fonction?

De l'échantillon de Données (d'entrée, de sortie doivent avoir la même structure, les classes: nombre entier, numérique, POSIXct/POSIXt):

    Value   Id  Date
1   125 1   2011-06-30 22:41:50
2   127 2   2011-06-30 22:41:50
3   126 3   2011-06-30 22:41:50
4   123 4   2011-06-30 22:41:50
5   130 5   2011-06-30 22:41:50
6   131 6   2011-06-30 22:41:50
7   128 7   2011-06-30 22:41:50
Un petit échantillon de vos données pourraient aider...je ne suis pas sûr que les formats de Date et d'identité.
Ajout d'un exemple de données 🙂

OriginalL'auteur Fge | 2011-08-01