Je veux calculer la moyenne pour chaque "jour" mais pour une partie de la journée (heure = 12-14). Ce code fonctionne pour moi, mais je dois entrer chaque jour comme une nouvelle ligne de code, ce qui représentera des centaines de lignes.
Cela semble être comme il devrait être simple à faire. J'ai fait cela facilement lorsque les variables de regroupement sont les mêmes mais ne savent pas comment le faire lorsque je ne voudrais pas inclure toutes les valeurs de la journée.
Y a-t-il une meilleure façon de faire cela? P> Voici ce que les données ressemblent à: p>
3 Réponses :
Essayez ceci:
aggregate(StomCond_Trunc~Day,data=subset(sap,Time>=12 & Time<=14),mean)
Si vous avez un ensemble de données volumineux, vous pouvez également souhaiter examiner le package Exemple: p> datable.table code>. Convertir un
data.frame code> à un
data.table code> est assez facile.
GRAND (ISH) Dataset H2>
df <- data.frame(Day=1:1000000,
Time=sample(1:14,1000000,replace=T),
StomCond_Trunc=rnorm(100000)*20)
system.time(aggregate(StomCond_Trunc~Day,data=subset(df,Time>=12 & Time<=14),mean))
# user system elapsed
# 10.19 0.27 10.47
dt <- data.table(df,key="Time")
system.time(dt[Time>=12 & Time<=14,mean(StomCond_Trunc),by=Day])
# user system elapsed
# 0.31 0.00 0.31
Utilisation de votre méthode d'origine, mais avec moins de dactylographie: Cependant, il ne s'agit que d'une méthode légèrement meilleure que votre originale. Ce n'est pas aussi flexible que les autres réponses car cela dépend de 0,1 incréments de vos valeurs de temps. Les autres méthodes ne se soucient pas de la taille de l'incrément, ce qui les rend plus polyvalents. Je recommanderais à la réponse de Maiasaura avec data.Table code> p> p>