2010-08-09 5 views
2

En R, j'ai une base de données de diverses statistiques enregistrées tout au long de la journée. (Par exemple, fréquence cardiaque). Les horodatages pour chaque entrée de mesure sont automatiquement créés et je les ai déjà convertis en un élément de classe POSIXt.Calcul des statistiques récapitulatives par jour/semaine/mois

Le nombre d'observations varie d'un jour à l'autre. Je me demande comment je peux calculer les statistiques sommaires par jour/semaine/mois.

Répondre

2

Utiliser tapply et format.

par ex.

> tst<-data.frame(date=as.POSIXct(runif(1000)*31557600,origin="2010/8/9"),value=runif(1000)) 

> tapply(tst$value,format(tst$date,"%a"),summary) 
$Fri 
    Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
0.001545 0.238900 0.499600 0.484700 0.697000 0.996400 

$Mon 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
0.02029 0.25100 0.49100 0.49910 0.75530 0.99120 

$Sat 
    Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
0.003557 0.245600 0.493600 0.499200 0.754600 0.996200 

$Sun 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
0.01867 0.22340 0.52750 0.51260 0.80500 0.97760 

$Thu 
    Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
0.003691 0.281200 0.600600 0.546800 0.790800 0.973000 

$Tue 
    Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
0.009304 0.253400 0.488900 0.510300 0.772200 0.997100 

$Wed 
    Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
0.002854 0.236200 0.400600 0.473500 0.742900 0.988600 

Vous pouvez remplacer le %a dans format avec d'autres codes pour convenir, voir ?strptime. Le mois est %b et le numéro de semaine est %U.

+0

qui a fait l'affaire. Je vous remercie. – CGN

+0

Pas de problème. Pour les décompositions plus avancées, la fonction 'ddply' du paquet' plyr' est utile. – James

+0

Nice - J'aime votre approche de reformater la date pour obtenir la variable de regroupement nécessaire. –

2

Vous pouvez essayer quelque chose comme ça pour obtenir des statistiques sommaires par mois pour la deuxième colonne de votre dataframe

library(plyr) 
library(fBasics) 
dlply(my_dataframe,.(format(date_Column, "%m %y")),function(x) basicStats(x[2])) 
Questions connexes