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
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)
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.
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)
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
Lorsque vous utilisez with(...,aggregate(...))
, ne mettez pas vos noms de colonnes entre guillemets.