93 votes

Calculer la moyenne par groupe

J'ai un grand cadre de données qui ressemble à ceci :

df <- data.frame(dive = factor(sample(c("dive1","dive2"), 10, replace=TRUE)),
                 speed = runif(10)
                 )
> df
    dive      speed
1  dive1 0.80668490
2  dive1 0.53349584
3  dive2 0.07571784
4  dive2 0.39518628
5  dive1 0.84557955
6  dive1 0.69121443
7  dive1 0.38124950
8  dive2 0.22536126
9  dive1 0.04704750
10 dive2 0.93561651

Mon objectif est d'obtenir la moyenne des valeurs d'une colonne lorsqu'une autre colonne est égale à une certaine valeur et de répéter cette opération pour toutes les valeurs. Par exemple, dans l'exemple ci-dessus, je voudrais obtenir une moyenne pour la colonne speed pour chaque valeur unique de la colonne dive . Alors quand dive==dive1 la moyenne pour speed est ceci et ainsi de suite pour chaque valeur de dive .

0voto

Ronak Shah Points 24715

Nous avons déjà des tonnes d'options pour obtenir la moyenne par groupe, en ajoutant une de plus de mosaic paquet.

mosaic::mean(speed~dive, data = df)
#dive1 dive2 
#0.579 0.440 

Cela renvoie un tableau numérique nommé, ou un cadre de données si nécessaire. stack

stack(mosaic::mean(speed~dive, data = df))

#  values   ind
#1  0.579 dive1
#2  0.440 dive2

données

set.seed(123)
df <- data.frame(dive=factor(sample(c("dive1","dive2"),10,replace=TRUE)),
                 speed=runif(10))

0voto

akrun Points 148302

Utilisation de collapse

library(collapse)
library(magrittr)
df %>% 
   fgroup_by(dive) %>%
   fsummarise(speed = fmean(speed))
#   dive     speed
#1 dive1 0.5788479
#2 dive2 0.4401514

données

set.seed(123)
df <- data.frame(dive=factor(sample(c("dive1","dive2"),10,replace=TRUE)),
             speed=runif(10))

0voto

Crayfish Points 65

Extension de la réponse fournie par RCchelsie - Si quelqu'un veut obtenir la moyenne calculée par groupe pour toutes les colonnes dans le cadre de données :

df %>% 
  group_by(dive) %>% 
  summarise(across(.cols=everything(), mean, na.rm=TRUE))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X