je la trame de données suivantes:Comment accélérer la somme cumulative au sein du groupe?
id<-c(1,1,1,1,1,3,3,3,3)
spent<-c(10,20,30,40,50,60,70,80,90)
date<-c("11-11-07","11-11-07","23-11-07","12-12-08","17-12-08","11-11-07","23-11-07","23- 11-07","16-01-08")
df<-data.frame(id,date,spent)
df$date2<-as.Date(as.character(df$date), format = "%d-%m-%y")
id date spent date2
1 1 11-11-07 10 2007-11-11
2 1 11-11-07 20 2007-11-11
3 1 23-11-07 30 2007-11-23
4 1 12-12-08 40 2008-12-12
5 1 17-12-08 50 2008-12-17
6 3 11-11-07 60 2007-11-11
7 3 23-11-07 70 2007-11-23
8 3 23-11-07 80 2007-11-23
9 3 16-01-08 90 2008-01-16
je dois calculer la somme spent
par chaque id
par jour et inclure dans le cadre de travail comme suit:
id date spent date2 sum.spent
1 1 11-11-07 10 2007-11-11 10
2 1 11-11-07 20 2007-11-11 30
3 1 23-11-07 30 2007-11-23 30
4 1 12-12-08 40 2008-12-12 40
5 1 17-12-08 50 2008-12-17 50
6 3 11-11-07 60 2007-11-11 60
7 3 23-11-07 70 2007-11-23 70
8 3 23-11-07 80 2007-11-23 150
9 3 16-01-08 90 2008-01-16 90
Le script suivant fonctionne bien (sauf pour la première rangée qui n'est pas une grosse affaire):
df$spent2<-NA
for (a in 2:9)
if (df[a,1]==df[a-1,1]&& df[a,4]==df[a-1,4])
(df[a,5]=df[a,3]+df[a-1,3])else(df[a,5]=df[a,3])
Cependant, depuis le nombre de lignes dans mon jeu de données réel est d'environ 1,5 million, le script ci-dessus prend environ 5 jours pour être exécuté. Je me demande si vous pouvez suggérer un moyen plus efficace d'écrire ce code et d'atteindre le même objectif.
Il fonctionne correctement et aussi rapidement ... Merci Mate! – AliCivil