1) non décroissante En supposant que les temps ne sont pas décroissants et que chaque temps est inférieur à 24 heures par rapport au temps précédent, nous pouvons déterminer le day
de chaque heure en ajoutant 1 chaque fois que l'on rencontre une heure inférieure à l'heure précédente. Additionner 24 fois le jour pour obtenir hour
donner hours2
qui est le nombre total d'heures depuis l'heure 0. Enfin, prenez la moyenne ou la médiane modulo 24 pour vous assurer qu'elle se trouve dans l'intervalle [0, 24].
hours <- c(20, 21, 22, 23 , 0, 1, 2, 3, 4)
day <- cumsum(c(0, diff(hours) < 0))
hours2 <- hours + 24 * day
mean(hours2) %% 24
## [1] 0
median(hours2) %% 24
## [1] 0
2) circulaire Dans cette variante, les heures sont représentées sur un cercle et l'on utilise la fonction mean.circular
et median.circular
du paquet circulaire. De plus amples informations sur ce paquet sont disponibles dans ses fichiers d'aide à l'adresse suivante Répondre à des questions biologiques à l'aide de données circulaires et d'analyses en R
library(circular)
hours <- c(20, 21, 22, 23 , 0, 1, 2, 3, 4)
hours.circ <- circular(hours, template = "clock24", units = "hours")
mean.circ <- mean(hours.circ)
as.numeric(mean.circ) %% 24
## [1] 0
median.circ <- median(hours.circ)
as.numeric(median.circ) %% 24
## [1] 0
plot(hours.circ)
points(mean.circ, col = "red", cex = 3)
points(median.circ, col = "blue", cex = 2)
[suite du graphique]
![screenshot]()
Note
Il peut également être utile d'essayer ce qui précède avec une entrée plus asymétrique.
hours <- c(20, 21, 22, 23 , 12)