Globale quotidienne des données au niveau de la durée hebdomadaire de niveau dans la R
J'ai un énorme dataset semblable à la suivante reproductible des données de l'échantillon.
Interval value
1 2012-06-10 552
2 2012-06-11 4850
3 2012-06-12 4642
4 2012-06-13 4132
5 2012-06-14 4190
6 2012-06-15 4186
7 2012-06-16 1139
8 2012-06-17 490
9 2012-06-18 5156
10 2012-06-19 4430
11 2012-06-20 4447
12 2012-06-21 4256
13 2012-06-22 3856
14 2012-06-23 1163
15 2012-06-24 564
16 2012-06-25 4866
17 2012-06-26 4421
18 2012-06-27 4206
19 2012-06-28 4272
20 2012-06-29 3993
21 2012-06-30 1211
22 2012-07-01 698
23 2012-07-02 5770
24 2012-07-03 5103
25 2012-07-04 775
26 2012-07-05 5140
27 2012-07-06 4868
28 2012-07-07 1225
29 2012-07-08 671
30 2012-07-09 5726
31 2012-07-10 5176
Je veux rassembler ces données pour le niveau hebdomadaire pour obtenir la sortie semblable au suivant:
Interval value
1 Week 2, June 2012 *aggregate value for day 10 to day 14 of June 2012*
2 Week 3, June 2012 *aggregate value for day 15 to day 21 of June 2012*
3 Week 4, June 2012 *aggregate value for day 22 to day 28 of June 2012*
4 Week 5, June 2012 *aggregate value for day 29 to day 30 of June 2012*
5 Week 1, July 2012 *aggregate value for day 1 to day 7 of July 2012*
6 Week 2, July 2012 *aggregate value for day 8 to day 10 of July 2012*
Comment puis-je obtenir facilement sans l'écriture d'un long code?
- Vous avez utilisé le [xt] balise, mais il ne semble pas que vous avez un xts objet. Vous avez raison, bien que la xts est probablement le moyen le plus simple pour ce faire. Avez-vous de la recherche à tous? Regardez
to.weekly
,apply.weekly
,period.apply
et de recherche pour la même chose. - Il est important de noter que l'OP veut globale par semaine de ce mois --- n'est pas par semaine de l'année. La plupart des réponses ci-dessous sont basés sur la semaine de l'année.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez dire la somme de la de la "valeur" par semaine, je pense que la meilleure façon de le faire est de convertir les données dans un xts objet comme GSee a suggéré:
Je laisse le formatage de la sortie comme un exercice pour vous 🙂
as.ts(data)
Si vous utilisez
week
delubridate
, vous n'aurez que cinq semaines pour passer àby
. Supposonsdat
vos données,Cela montre un résumé du 24 au 28 semaine de l'année. De la même façon, nous pouvons obtenir les moyens de
aggregate
avecSi vous utilisez un bloc de données, vous pouvez facilement le faire avec le
tidyquant
paquet. Utiliser letq_transmute
fonction, qui applique une mutation et renvoie un nouveau bloc de données. Sélectionnez la colonne "valeur" et appliquer la xts fonctionapply.weekly
. L'argument supplémentaireFUN = sum
obtiendrez le total par semaine.Je viens de tombé sur cette vieille question, car il a été utilisé comme un dupe de la cible.
Malheureusement, tous les upvoted réponses (sauf l'un par konvas et aujourd'hui supprimé un) de présenter des solutions pour agréger les données par semaine de l'année alors que l'OP a demandé à l'agrégation par semaine du mois.
La définition de semaine de l'année et semaine du mois est ambigu, car discuté ici, ici, et ici.
Cependant, l'OP a indiqué qu'il veut compter les jours 1 à 7 de chaque mois, la semaine 1 du mois, les jours de 8 à 14 ans comme la semaine 2 du mois, etc. Notez que la semaine 5 est un stub pour la plupart des mois composé de seulement 2 ou 3 jours (à l'exception du mois de février).
Avoir préparé le terrain, voici une
data.table
solution pour ce type de regroupement:Nous pouvons vérifier que nous avons choisi la bonne intervalles par
qui est en ligne avec les OP de la spécification.
De données
Quand vous dites "agrégat" ensemble de valeurs, de vous dire de prendre leur somme? Disons que votre bloc de données est
d
et en supposantd$Interval
est de classeDate
, vous pouvez essayer de