mean sous conditions

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Myriam Croze
Messages : 18
Enregistré le : 22 Jan 2013, 15:14

mean sous conditions

Messagepar Myriam Croze » 04 Avr 2019, 06:40

Bonjour,

Je souhaite calculer la moyenne d'une colonne de mon tableau en fonction des valeurs d'une autre colonne.

Voilà à quoi ressemble mon tableau (TableS1):

Days1 Deme1 Deme2 value modif Deme
36.5 4 6 0.51 0.49 46
40 6 6 0.20 0.19 66
51 6 6 0.19 0.17 66
38 3 5 0.22 0.20 35
59 8 2 0.23 0.22 82
... .. ... ... ... ...

Je voudrai calculer la moyenne de la colonne modif pour chaque combinaison de Deme1 et Deme2. C'est à dire la moyenne pour Deme1=1 et Deme2=1, Deme1=1 et Deme2=2, et ainsi de suite sachant que les valeurs de Deme1 et Deme2 peuvent aller de 1 à 8. J'ai fait une colonne Deme où j'ai regroupé Deme1 et Deme2.

J'ai ecrit ce code:

Code : Tout sélectionner

mean11 <- mean(TableS1$modif[TableS1$Deme == 11])
mean11
mean22 <- mean(TableS1$modif[TableS1$Deme == 22])
mean22
mean33 <- mean(TableS1$modif[TableS1$Deme == 33])
mean33
mean44 <- mean(TableS1$modif[TableS1$Deme == 44])
mean44
mean55 <- mean(TableS1$modif[TableS1$Deme == 55])
mean55
mean66 <- mean(TableS1$modif[TableS1$Deme == 66])
mean66
mean77 <- mean(TableS1$modif[TableS1$Deme == 77])
mean77
mean88 <- mean(TableS1$modif[TableS1$Deme == 88])
mean88
mean12 <- mean(TableS1$modif[TableS1$Deme == 12 | TableS1$Deme == 21])
mean12
...
meanij


J'aimerai savoir s'il n'y aurai pas une façon plus simple de faire ça (par exemple avec une boucle).

De plus, j'aimerai additionner toute les moyennes divisé par le nombre de Demes (mean11+mean12+mean13+....meanij)/nombre de Demes
Cependant certaines mean sont egal a NA car certain Deme sont absent (par exemple, dans la colonne Deme1, il n'y a pas de 1). Par consequent, le nombre de Deme et de mean va varier suivant mes fichiers. Comment puis-je changer le nombre de Deme?

J'espère que mes explications sont claires.
Merci d'avance pour votre aide.

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: mean sous conditions

Messagepar Pierre-Yves Berrard » 04 Avr 2019, 07:19

Bonjour,

Pas besoin de boucle :

Code : Tout sélectionner

aggregate(modif ~ Deme1 + Deme2, data = TableS1, FUN = mean)

aggregate ne calculera des moyennes que pour les croisements effectivement présents (ce qui répond à la deuxième question).
PY

Lelandais ludovic
Messages : 11
Enregistré le : 20 Fév 2019, 11:11

Re: mean sous conditions

Messagepar Lelandais ludovic » 10 Avr 2019, 17:00

pour la première partie de la question à savoir faire une moyenne selon les valeur de deme1 et deme 2 tu peux regarder la fonction tapply

par exemple

Code : Tout sélectionner

 ARR <- tapply ( TableS1$modif,TableS1$Deme,mean,na.rm=T (si tu as des Na ) )


il te sortira ainsi ARR un array avec la moyenne de la colonne modif pour toutes les valeurs de Deme.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité