Comment réparer dans R : fonction d’agrégation manquante, par défaut « longueur »



Une erreur que vous pouvez rencontrer lors de l’utilisation de R est :

Aggregation function missing: defaulting to length

Cette erreur se produit lorsque vous utilisez la fonction dcast du package reshape2 pour convertir un bloc de données d’un format long à un format large , mais que plusieurs valeurs peuvent être placées dans les cellules individuelles du bloc de données large.

L’exemple suivant montre comment corriger cette erreur dans la pratique.

Comment reproduire l’erreur

Supposons que nous ayons le bloc de données suivant dans R qui contient des informations sur les ventes de divers produits :

#create data frame
df <- data.frame(store=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
                 promotion=c('Y', 'Y', 'N', 'N', 'Y', 'Y', 'N', 'N'),
                 product=c(1, 2, 1, 2, 1, 2, 1, 2),
                 sales=c(12, 18, 29, 20, 30, 11, 15, 22))

#view data frame
df

  store promotion product sales
1     A         Y       1    12
2     A         Y       2    18
3     A         N       1    29
4     A         N       2    20
5     B         Y       1    30
6     B         Y       2    11
7     B         N       1    15
8     B         N       2    22

Supposons maintenant que nous essayions d’utiliser la fonction dcast pour convertir la trame de données d’un format long à un format large :

library(reshape2)

#convert data frame to wide format
df_wide <- dcast(df, store ~ product, value.var="sales")

#view result
df_wide

Aggregation function missing: defaulting to length
  store 1 2
1     A 2 2
2     B 2 2

Notez que la fonction dcast fonctionne mais nous recevons le message d’avertissement de Fonction d’agrégation manquante .

Comment réparer l’erreur

La raison pour laquelle nous recevons un message d’avertissement est que pour chaque combinaison de magasin et de produit , il existe deux valeurs potentielles que nous pourrions utiliser pour les ventes .

Par exemple, pour le magasin A et le produit 1, la valeur des ventes pourrait être de 12 ou 29.

Ainsi, la fonction dcast utilise par défaut « longueur » comme fonction d’agrégation.

Par exemple, la base de données large nous indique que pour le magasin A et le produit 1, il existe un total de 2 valeurs de ventes.

Si vous souhaitez plutôt utiliser une fonction d’agrégation différente, vous pouvez utiliser fun.aggregate .

Par exemple, nous pouvons utiliser la syntaxe suivante pour calculer la somme des ventes par magasin et par produit :

library(reshape2)

#convert data frame to wide format
df_wide <- dcast(df, store ~ product, value.var="sales", fun.aggregate=sum)

#view result
df_wide

  store  1  2
1     A 41 38
2     B 45 33

Voici comment interpréter les valeurs dans le large bloc de données :

  • La somme des ventes du magasin A et du produit 1 est de 41 .
  • La somme des ventes du magasin A et du produit 2 est de 38 .
  • La somme des ventes du magasin B et du produit 1 est de 45 .
  • La somme des ventes du magasin B et du produit 2 est de 33 .

Notez que nous ne recevons aucun message d’avertissement cette fois car nous avons utilisé l’argument fun.aggregate .

Ressources additionnelles

Les didacticiels suivants expliquent comment corriger d’autres erreurs courantes dans R :

Comment réparer dans R : constante de chaîne inattendue
Comment réparer dans R : formule de modèle invalide dans ExtractVars
Comment réparer dans R : l’argument n’est ni numérique ni logique : renvoyer na

Ajouter un commentaire

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