R : Comment utiliser Aggregate() et ne pas supprimer de lignes avec NA



Vous pouvez utiliser la fonction Aggregate() dans R pour calculer des statistiques récapitulatives pour les variables d’un bloc de données.

Par défaut, si la fonction Aggregate() rencontre une ligne dans un bloc de données avec une ou plusieurs valeurs NA, elle supprimera simplement la ligne lors de l’exécution des calculs.

Cela peut entraîner des conséquences inattendues lors de l’exécution des calculs.

Pour éviter ce comportement, vous pouvez utiliser l’argument na.action=NULL dans la fonction Aggregate() .

L’exemple suivant montre comment utiliser cet argument dans la pratique.

Exemple : utilisez aggegate() dans R et ne supprimez pas les lignes avec NA

Supposons que nous ayons le bloc de données suivant dans R qui montre les points et les passes décisives des basketteurs de différentes équipes :

#create data frame
df <- data.frame(team=c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'),
                 points=c(5, 9, 12, 14, 14, 13, 10, 6, 15, 18),
                 assists=c(NA, 4, 4, 5, 3, 6, 8, 4, 10, NA))

#view data frame
df

   team points assists
1     A      5      NA
2     A      9       4
3     A     12       4
4     A     14       5
5     A     14       3
6     B     13       6
7     B     10       8
8     B      6       4
9     C     15      10
10    C     18      NA

Supposons maintenant que nous essayions d’utiliser la fonction Aggregate() pour calculer la somme des points et des passes décisives , regroupés par équipe :

#attempt to calculate sum of points and assists, grouped by team
aggregate(. ~ team, data=df, FUN=sum, na.rm=TRUE)

  team points assists
1    A     49      16
2    B     29      18
3    C     15      10

Le résultat semble nous montrer la somme des points et des passes décisives par équipe, mais les lignes avec les valeurs NA ont en fait été supprimées lors de l’exécution de ces calculs.

Nous pouvons le confirmer en consultant le bloc de données d’origine et en voyant que l’équipe C a deux valeurs dans la colonne des points :

  • 15
  • 18

Ainsi, l’équipe C devrait avoir une somme de points de 33, mais le résultat n’en affiche que 15.

En effet, la ligne avec une valeur de points de 18 a une valeur de NA dans la colonne des passes décisives , ce qui signifie que cette ligne n’a en fait pas été utilisée lors du calcul de la somme des points de l’équipe C.

Pour garantir que les lignes avec des valeurs NA ne sont pas supprimées lors de l’exécution des calculs, nous devons utiliser l’argument na.action=NULL comme suit :

#calculate sum of points and assists, grouped by team (don't drop NA rows)
aggregate(. ~ team, data=df, FUN=sum, na.rm=TRUE, na.action=NULL)

  team points assists
1    A     54      16
2    B     29      18
3    C     33      10

Notez que la fonction Aggregate() renvoie correctement une somme de valeurs de points pour l’équipe C égale à 33 cette fois.

Remarque : L’argument na.rm=TRUE spécifie que les valeurs NA doivent être ignorées lors de l’exécution d’un calcul dans une colonne spécifique.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans R :

Comment utiliser la fonction summary() dans R
Comment calculer la moyenne par groupe dans R
Comment calculer des statistiques descriptives dans R

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *