0
votes

Trouver une cumsum annuelle d'une variable dans R?

Dans mon code ci-dessous, je voudrais trouver le cumsum code> pour chaque année. En ce moment, variable A code> est en train d'être sommée code> pour toute la durée. Toute aide serait appréciée.

library(dplyr)
library(lubridate)
set.seed(50)
DF <- data.frame(date = seq(as.Date("2001-01-01"), to= as.Date("2003-12-31"), by="day"),
                       A = runif(1095, 0,10))
DF1 <- DF %>% 
  mutate(Year = year(date), Month = month(date), JDay = yday(date)) %>%
  filter(between(Month,5,10)) %>%
  group_by(Year, JDay) %>% 
  mutate(Precipitation = cumsum(A))


0 commentaires

3 Réponses :


2
votes

Il suffit de supprimer Jday à partir de variables de regroupement xxx


1 commentaires

J'ai supprimé mon commentaire précédent ... J'ai eu quelques autres paquets ( Tidyverse , TidyR ), car je crois que je crois que la seule raison de ne pas avoir la bonne réponse.



0
votes

Il semble que le problème ici est avec votre clause de regroupement. Spécifiquement, comme il existe autant de combinaisons distinctes de an et JDAD dans vos données car il existe des lignes dans DF , le cumsum suivant Fonctionnement à l'intérieur Mutate renvoie simplement la même valeur que la colonne d'entrée, A . Je crois que ce qui suit devrait vous donner ce que vous êtes après xxx


2 commentaires

J'ai mis à jour ma réponse pour montrer que le code produit en effet un cadre de données dans lequel précipitations représente la valeur cumulative de A pour chaque année . Si la sortie n'est pas ce que vous êtes après, pourriez-vous vous fournir un reprex qui montre ce que vous vous attendez à obtenir?


J'ai redémarré ma session R et charger uniquement lubridate et dplyr packages et il a commencé à fonctionner. Auparavant, j'ai eu le Tidyverse , titsy des paquets chargés également. Je ne sais pas pourquoi, mais je pense qu'il pourrait y avoir une sorte de confusion parmi les paquets, c'est pourquoi je ne recevais pas la bonne réponse.



0
votes

Voici une solution data.Table code> de la carte. Si vous voulez le Cumsum pour chaque année, mais ne montrez que l'intervalle du mois 5 à 10, ce serait datable.table code> code pour cela: xxx pré>

si vous Vous voulez le Cumsum pour les mois 5-10 seulement, vous mettriez le filtre avant de calculer le Cumsum: P>

data.table(DF)[, `:=` (Year = year(date), Month = month(date), JDay = yday(date))][between(Month, 5, 10)][, Precipitation := cumsum(A), by=Year][]
#>            date         A Year Month JDay Precipitation
#>   1: 2001-05-01 6.2465000 2001     5  121      6.246500
#>   2: 2001-05-02 0.1877191 2001     5  122      6.434219
#>   3: 2001-05-03 5.3717570 2001     5  123     11.805976
#>   4: 2001-05-04 5.5457454 2001     5  124     17.351722
#>   5: 2001-05-05 5.1508288 2001     5  125     22.502550
#>  ---                                                   
#> 548: 2003-10-27 0.1979292 2003    10  300    916.597973
#> 549: 2003-10-28 6.7286553 2003    10  301    923.326629
#> 550: 2003-10-29 8.7215420 2003    10  302    932.048171
#> 551: 2003-10-30 8.2572257 2003    10  303    940.305396
#> 552: 2003-10-31 9.6567923 2003    10  304    949.962189


0 commentaires