7
votes

Calculer une moyenne quotidienne dans r

Dis que j'ai la matrice suivante:

x1 = 1:288
x2 = matrix(x1,nrow=96,ncol=3)

r

0 commentaires

3 Réponses :


10
votes

Il y a.

Supposons que nous ayons les jours: xxx

vous pouvez faire facilement xxx

si Vous avez un fichier de données avec une variable de date, vous pouvez l'utiliser. Vous pouvez le faire pour toutes les variables à la fois, à l'aide d'agrégat: xxx

examine les fichiers d'aide de ces fonctions pour commencer. Faites également une recherche ici, il existe de nombreuses autres réponses intéressantes sur ce problème:


3 commentaires

@Snowfrog tu as tort. TAPPLY ne crée pas de cadre de données. Cela crée un vecteur (dans ce cas). Grande différence.


Un problème avec la méthode Tapply est qu'il crée un vecteur (nombre de colonnes = nombre de jours). La méthode crée une trame de données (1 colonne avec nombre de lignes = nombre de jours), ce qui peut être plus pratique si une manipulation ultérieure des données est nécessaire.


Pour référence aux autres: Si vous n'avez pas créé d'objet indépendant pendant des jours et que ce n'est qu'une colonne de votre DF, pour que vous n'ayez besoin de spécifier df $ jours



4
votes

Un moyen assez compact et rapide de faire cela consiste à remodeler le vecteur dans une matrice appropriée et à calculer le moyen de colonne.

colMeans(matrix(x2[,2],nrow=24))


3 commentaires

Solution propre, à condition qu'il n'y ait aucune donnée manquante nulle part. Sinon, la matrice ne représenterait pas les jours.


Vous devez faire attention avec cette méthode afin que les dimensions soient correctes. Mais vous pouvez traiter des données manquantes en utilisant NA pour ceux qui utilisent Na.rm = true


Je suis conscient de ça :-) Je veux dire disparaître dans le sens de "Pas chaque jour a 24 rangées de données"



6
votes

1) TS. strong> Comme il s'agit d'une série de temps régulièrement espacée, convertissez-la en une série TS code>, puis l'agrégez de la fréquence 24 à la fréquence 1:

library(zoo)

day.hour <- seq(1, length = length(x2[, 2]), by = 1/24)
z <- zoo(x2[, 2], day.hour)
aggregate(z, floor, mean)
##          1     2     3     4 
##      108.5 132.5 156.5 180.5


1 commentaires

+1 pour montrer comment utiliser ZOO et TS pour cela. Je ne l'ai pas mentionné comme je ne voulais pas trop prendre trop sur les données dans le vrai problème, mais elle est définitive et utile.