9
votes

R: Calculer des moyens pour le sous-ensemble d'un groupe

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? xxx

Voici ce que les données ressemblent à: xxx


0 commentaires

3 Réponses :


12
votes

Essayez ceci:

aggregate(StomCond_Trunc~Day,data=subset(sap,Time>=12 & Time<=14),mean)


0 commentaires

5
votes

Si vous avez un ensemble de données volumineux, vous pouvez également souhaiter examiner le package datable.table code>. Convertir un data.frame code> à un data.table code> est assez facile.

Exemple: p>

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 


0 commentaires

0
votes

Utilisation de votre méthode d'origine, mais avec moins de dactylographie: xxx

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


0 commentaires