2015-02-04 34 views
6

Ich bekomme diesen Fehler und ich bin nicht ganz sicher, was es bedeutet. Alle meine Variablennamen sind konsistent und es gibt keine Tippfehler. Fehle ich hier etwas?Fehler in aggregate.data.frame: Argumente müssen dieselbe Länge haben

Der Code

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

Erzeugt den Fehler

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

Können Sie die genaue Datafame eingeben? – user2600629

+0

Können Sie den Aufruf "aggregate" anzeigen, da er falsch angegeben werden kann. ty – user20650

+3

Sie erhalten einen ähnlichen Fehler mit Aggregat (mtcars, list ("am"), mean) '. Aber wenn Sie es wie aggregate (mtcars, list (mtcars $ am), mean) oder aggregate (. ~ Am, mean, data = mtcars) angeben, ist alles in Ordnung – user20650

Antwort

6

es ist kein Tippfehler (der Datenrahmen dataNew in Ihrem Anruf aufgerufen wird aber datNew im Fehler) Unter der Annahme, sind x, y, z, a und ab die Namen der Spalten in dataNew?

Einige Funktionen, wie subset, können Sie Spaltennamen des Objekts angeben, an denen sie gerade arbeiten. Die aggregate Funktion nicht, so dass alle Spalten der dataNew im by Argument aufgeführten müssen speziell als solche bezeichnet werden. Versuchen Sie Folgendes:

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

Überprüfen Sie class(dataNew). Wenn es nicht ein data.frame ist, sollte diese dataNew <- data.frame(dataNew) vor der Aggregation den Fehler beheben oder

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

habe ich diesen Fehler.
Die einfache Lösung, diesen Fehler zu entfernen, besteht darin, alle Variablen zusammen mit ihrem Dataset-Namen wie "ds_name $ var_name" zu schreiben.
Ich bin nicht sicher, was der Dataset-Name ist Ihr Fall, also gebe ich Ihnen ein anderes ähnliches Beispiel.

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

hier "hr" ist der Datensatznamen und "Year.Total", "Hospital_ID", "District_ID", "INSTRUMENT_ID" sind die Variablen in "hr" Dataset.

Wenn Sie auf diese Weise Aggregatfunktionen schreiben, erhalten Sie nie wieder Fehler.

0

Mit data.frame als by Argument funktioniert für mich versuchen :

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

meine ich das by Argument nicht geben, nur den Namen der Argumente, eine data.frame mit Säulen wie diese Argumente geben

0

Wenn Sie with(...,aggregate(...)) verwenden, setzen Sie Ihre Spaltennamen nicht in Anführungszeichen.

Verwandte Themen