2017-09-28 1 views
0

J'ai une question très similaire adressée ici how to sum data by month and store them in the first day of the monthComment résumer plusieurs variables de dataframe par mois

La seule chose qui diffère du poste ci-dessus est que mon vrai data.frame a obtenu 300 variables qui doivent être regroupées et additionné par mois.

Quelque chose comme ceci:

date  gauge1 gauge2 gauge3 
1937-02-19 25.768334 23.98 111.3 
1937-02-20 24.918828 21.987 33.9 
1937-02-21 24.069322 19.96 18.981 

sortie souhaitée:

date   gauge1 gauge2 gauge3 
1937-02-01 3328.98 2229.0 11541.3 
1937-03-01 222.19 1176.8 1098.8 
1937-04-01 1124.8 3395.15 1558.9 

Sur la base de réponse @jeremycg J'ai essayé:

library(dplyr) 
qfile %>% mutate(monthyear = as.character(format(date, "%m-%Y"))) %>% 
      arrange(date) %>% 
      group_by(monthyear) %>% 
      summarise(date=date[1], flow = sum(df[, c(2:4)]) 

Mais il ne fonctionne pas.

Toute aide serait vraiment appréciée.

Merci

+0

Pour rendre votre question utile pour les autres, veuillez expliquer pourquoi la tentative 'dplyr' a échoué. Je vous remercie. – Uwe

+0

Je ne sais pas pourquoi cela n'a pas fonctionné ... désolé – 1000111000

+0

Avez-vous reçu un message d'erreur? – Uwe

Répondre

2

Si toutes colonnes de votre ensemble de données, sauf la colonne date doivent être regroupées et résumées, vous pouvez essayer:

library(data.table) 
setDT(qfile)[, lapply(.SD, sum), by = lubridate::floor_date(date, "month")] 
lubridate gauge1 gauge2 gauge3 
1: 1937-02-01 74.75648 65.927 164.181 

Ou, si vous vouloir renommer la variable de regroupement:

setDT(qfile)[, lapply(.SD, sum), by = (date = lubridate::floor_date(date, "month"))] 
  date gauge1 gauge2 gauge3 
1: 1937-02-01 74.75648 65.927 164.181 

Après @Henrik suggestion, l'appel à une fonction d'un autre paquet peut être évité en utilisant data.table 's intégrés mday() fonction:

setDT(qfile)[, lapply(.SD, sum), by = (date = date - mday(date) + 1)]