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 🙂
Ajout d'un exemple de données 🙂
OriginalL'auteur Fge | 2011-08-01
Vous devez vous connecter pour publier un commentaire.
Voir cette réponse pour une méthode qui devrait fonctionner pour vous. Comment obtenir la somme de chacune des quatre lignes d'une matrice dans la R. Dans votre cas, il serait:
Votre méthode actuelle pour obtenir la première Date doit être fine.
Oui, bien sûr, merci. Changé dans la réponse.
OriginalL'auteur Aaron