2016-04-27 11 views
1

Ich habe einen Datenrahmen yy. Ich möchte eine Aggregation der Daten vornehmen. Es gibt eine Zeitstempelvariable und in der Zeitvariablen gibt es eine Wiederholung. Ich möchte die eindeutigen Werte des Zeitstempels finden und alle anderen Variablen in diesem Datenrahmen in Bezug auf diesen eindeutigen Zeitstempelwert aggregieren. Schließlich muss ich den Mittelwert der anderen Variablen ermitteln. Hier ist die Datenprobeaggregieren Sie die Daten zu einer Spalte mit eindeutigen Wert

temp yield density   time 
1 54 NA 30.23 2009-12-31 18 
2 54 NA 30.22 2009-12-31 19 
3 53 NA 30.20 2009-12-31 20 
4 53 NA 30.19 2009-12-31 21 
5 50 NA 30.18 2009-12-31 22 
6 51  3 30.16 2009-12-31 23 
....... 

ich den folgenden Code ausführen:

aggdata=aggregate(yy~time, by= list(unique(time)), data =yy, FUN = mean,na.rm=TRUE) 

Ich habe diese Warnung

Argument nicht numerisch oder logisch ist: Rückkehr NA

Wenn ich die Aggregation eine Variable auf einmal ausführen, wird es rks

aggdata=aggregate(temp~time, by= list(unique(time)),data=yy,FUN=mean) 

Aber wenn Sie die gesamte Datenliste yy verwenden, gibt es Fehler. Könnte jemand bitte das erklären?

+1

Betrachtet man die Hilfeseite '? Aggregate', sehe ich keine Syntax wie' aggregate (formula, by, data, FUN) '. Vielleicht müssen Sie unter den unterstützten Syntaxen auswählen. – Frank

Antwort

0

Mit data.table, wandeln die ‚data.frame‘ auf ‚data.table '(setDT(yy)), gruppiert nach' Zeit ', geben Sie die Spalten an, die in .SDcols zusammenzufassen sind, durchlaufen Sie sie und erhalten Sie die mean.

library(data.table) 
setDT(yy)[, lapply(.SD, mean, na.rm=TRUE), by = time, .SDcols = c("temp", "yield")] 
+0

hier von = Zeit also wird es zurückkehren und aggregieren mit einzigartigen Wert der Zeit? – newleaf

+0

@newleaf Ja, es wird durch einmaligen Wert der Zeit aggregieren – akrun

+0

Das ist schnell und ordentlich. Vielen Dank. – newleaf

0

Dies scheint wie etwas, das das Paket mit dplyr

Sie könnten etwas tun, wie folgt leicht getan werden könnte:

yy <- yy %>% group_by(time) %>% summarize(meantemp = mean(temp), meanyield = mean(yield))