1 pièce(s) jointe(s)
Somme d une colonne avec condition sous une autre colonne
Bonjour a tous,
j ai le problème suivant: dans un dataframe, je cherche a faire la somme des lignes de la colonne B lorsque la colonne A est egale a 0.
J ai fait le graphique suivant (sous excel mais ma question porte bien sur R), je souhaite additionner les valeurs 2, 3, 1, 5 et 4 (en colonne B) car, pour ces lignes, la valeurs en A est nulle. Le résultat souhaite est donc 15.
Le resultat suivant sera 2+7+3 =12.
Pièce jointe 576313
Pour info si A =0 alors B<>0 et inversement.
J ai examine la fonction cumsum mais je ne sait pas si c est adapte.
En vous remerciant de votre aide.
Création d'une variable groupe
Bonjour,
Vous pouvez construire une variable groupe puis utiliser la fonction aggregate().
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| dftest <- read.table(header = TRUE, text = "
A B
5 0
0 2
0 3
0 1
0 5
0 4
4 0
0 2
0 7
0 3
6 0
") |
Code:
1 2 3 4 5 6
| dftest$groupe <- ifelse(dftest$A != 0, 1, 0)
dftest$groupe[dftest$groupe == 1] <- 1:sum(dftest$groupe)
library(data.table)
setDT(dftest)
while(min(dftest$groupe)==0) dftest[, groupe := ifelse(groupe==0, shift(groupe), groupe)]
setDF(dftest) |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| > dftest
A B groupe
1 5 0 1
2 0 2 1
3 0 3 1
4 0 1 1
5 0 5 1
6 0 4 1
7 4 0 2
8 0 2 2
9 0 7 2
10 0 3 2
11 6 0 3 |
Code:
dfres <- aggregate(B ~ groupe, dftest, sum)
Code:
1 2 3 4 5
| > dfres
groupe B
1 1 15
2 2 12
3 3 0 |
Cordialement,