2016-04-28 7 views
1

Ich habe mehrere fusionierte täglich Zoo Zeitreihen (sagen wir mal der Name des fusionierten Satz ist 'test'), die in dem folgenden Format angezeigt:Averaging Zeitreihe in Aggregat in apply.daily() in R

>test 


       TS1  TS2  TS3 
2014-07-30 2.0  3.0  4.0 
2014-07-31 2.5  3.0  4.5 
2014-08-01 3.0  3.0  5.0 

Ich möchte die Zeitreihe auf verschiedene Arten aggregieren/manipulieren. Die einfachste Mittelung oder Summierung entgeht mir jedoch. Ich habe versucht, die folgenden:

ts <- apply.daily(as.xts(test),mean) 

, die ich gedacht hatte, würde mir die folgende Ausgabe geben:

>ts 

        X  
    2014-07-30 3.0  
    2014-07-31 3.3  
    2014-08-01 3.7  

Aber es gibt die gleiche Zeitreihe als zuvor. Ich verstehe, dass dies für apply.weekly() und apply.monthly() nützlich wäre, von denen ich plane zu verwenden, aber wie kann ich all diese Funktionen anpassen, um TS1, TS2 und TS3 in einen Gesamtdurchschnitt auf der gleichen Basis zu verpacken, während der Zoo/xts Formatierung.

Vielen Dank

Antwort

1

am Beispiel Basierend zeigte, können wir die Zeilen verketten und nehmen Sie die mean

apply.daily(as.xts(test), function(x) round(mean(c(x)),1)) 
#   [,1] 
#2014-07-30 3.0 
#2014-07-31 3.3 
#2014-08-01 3.7 

Beachten Sie, dass der Code des OP mit auf einer täglichen Datensatzes gibt die Eingangsdaten, da es nur eine einzige Beobachtung für die Kriterien. Nehmen wir an, wenn der Datensatz Datetime-Klasse ist, dann apply.daily mit den mean für jeden einzelnen Tag zurückkehren, wickeln Sie es mit einem anderen mean, um die mean für jede Zeile zu erhalten, dh

test1 <- structure(list(TS1 = c(2, 2.5, 3, 2.2), TS2 = c(3, 3, 3, 3.2), 
TS3 = c(4, 4.5, 5, 4.4)), .Names = c("TS1", "TS2", "TS3"), 
class = "data.frame", row.names = c("2014-07-30 07:00:00", 
"2014-07-31 05:00:00", "2014-08-01 03:00:00", "2014-07-30 07:20:00")) 

apply.daily(as.xts(test1), function(x) round(mean(mean(x)),1)) 
#     [,1] 
#2014-07-30 07:20:00 3.1 
#2014-07-31 05:00:00 3.3 
#2014-08-01 03:00:00 3.7 

Wie wir anonyme Funktion verwenden, wir nicht brauchen die beiden mean

apply.daily(as.xts(test1), function(x) round(mean(x),1)) 
#      [,1] 
#2014-07-30 07:20:00 3.1 
#2014-07-31 05:00:00 3.3 
#2014-08-01 03:00:00 3.7 

die obigen Ergebnisse mit OP Ansatz prüfen

apply.daily(as.xts(test1), mean) 
#     TS1 TS2 TS3 
#2014-07-30 07:20:00 2.1 3.1 4.2 
#2014-07-31 05:00:00 2.5 3.0 4.5 
#2014-08-01 03:00:00 3.0 3.0 5.0 

round(mean(c(2.1, 3.1, 4.2)), 1) 
#[1] 3.1 
round(mean(c(2.5, 3.0, 4.5)), 1) 
#[1] 3.3