web-dev-qa-db-fra.com

Erreur dans aggreg.data.frame: les arguments doivent avoir la même longueur

Je continue à avoir cette erreur et je ne sais pas trop ce que cela signifie. Tous mes noms de variables sont cohérents et il n'y a pas de fautes de frappe. Est-ce que j'ai râté quelque chose?

Le code 

datNewagg <- aggregate (dataNew, by = list('x', 'y', 'z', 'a', 'ab'), 
                                                             FUN = mean)  

Produit l'erreur

  Error in aggregate.data.frame(datNew, by = list("x", "y",  : 
  arguments must have same length
6
RHatesMe

En supposant que ce ne soit pas une faute de frappe (le bloc de données s'appelle dataNew dans votre appel mais datNew dans l'erreur), sont-ils x, y, z, a et ab les noms des colonnes dans dataNew?

Certaines fonctions, comme subset , vous permettront de spécifier les noms de colonne de l'objet sur lequel elles travaillent directement. La fonction aggregate ne le fait pas. Par conséquent, toutes les colonnes de dataNew répertoriées dans l'argument by doivent être spécifiquement désignées comme telles. Essaye ça:

datNewagg <- aggregate(dataNew,
    by = list(
        x = dataNew$x,
        y = dataNew$y,
        z = dataNew$z,
        a = dataNew$a,
        ab = dataNew$ab),
    FUN = mean) 
8
rensa

J'ai utilisé obtenir cette erreur.
La solution simple pour supprimer cette erreur consiste à écrire toutes les variables avec le nom de leur ensemble de données tel que "nom_sd $ nom_vari".
Je ne sais pas quel est le nom du jeu de données, alors je vais vous donner un autre exemple similaire.

curYearRev <-aggregate(hr$Year.Total, by = list(hr$Hospital_ID,hr$District_ID,hr$Instrument_ID) , FUN = sum)

Ici, "hr" est le nom du jeu de données et "Year.Total", "Hospital_ID", "District_ID", "Instrument_ID" sont les variables de "hr".

L'écriture de fonctions agrégées de cette manière ne vous donnera plus jamais d'erreur.

6
user3019973

Vérifiez class(dataNew). Si ce n’est pas un data.frame, cette dataNew <- data.frame(dataNew) avant agrégation devrait résoudre l’erreur ou

datNewagg <- aggregate (data.frame(dataNew), by = list('x', 'y', 'z', 'a', 'ab'), 
                                                         FUN = mean)
1
vital_dml

Utiliser data.frame comme argument by fonctionne pour moi Essayez ceci:

datNewagg <- aggregate (dataNew, by = dataNew[c('x', 'y', 'z', 'a', 'ab')],                                                             FUN = mean)

Je veux dire, ne donnez pas l'argument by, mais juste le nom des arguments, donnez un data.frame avec des colonnes comme ces arguments

0
Pavel Shliaha

Lorsque vous utilisez with(...,aggregate(...)), ne mettez pas vos noms de colonnes entre guillemets. 

0
ginn