2012-12-19 22 views
5

Ich versuche herauszufinden, was xts (oder Zoo) als die Zeit nach einer apply.period verwendet. Betrachten Sie folgendes:Erzwingen ganze Wochen mit apply.weekly()

> myTs = xts(1:10, as.Date(1:10, origin = '2012-12-1')) 
> apply.weekly(myTs, colSums) 
      [,1] 
2012-12-02 1 
2012-12-09 35 
2012-12-11 19 

Ich denke der '2012-12-02' bedeutet "für die Woche, die 2012-12-02 endet, die Summe ist 1". Die Zeit ist also das Ende der Woche.

Aber das Problem ist mit dem „2012.12.11“ - ich denken, was es tut zu sagen, dass der 11. der letzte Tag der Woche ist die gegeben wurde, so dass es zu geben, dass als die Zeit .

Gibt es eine Möglichkeit, es zu zwingen, den Sonntag zu geben, an dem es endet, auch wenn dieser Tag nicht im Datensatz enthalten war?

Antwort

3

Try this:

nextsun <- function(x) 7 * ceiling(as.numeric(x-0+4)/7) + as.Date(0-4) 
aggregate(myTs, nextsun, sum) 

wo nextsun von nextfri Code abgeleitet wurde gegeben in der zoo quick reference durch Ersetzen von 5 (für Freitag) mit 0 (für Sonntag).

3

Das sind ganze Wochen. Es zeigt nur das Datum der letzten Beobachtung. Siehe ?endpoints (apply.weekly, ist im Wesentlichen ein dünner Wrapper für Endpunkte).

apply.weekly 
function (x, FUN, ...) 
{ 
    ep <- endpoints(x, "weeks") 
    period.apply(x, ep, FUN, ...) 
} 
<environment: namespace:xts> 

Von? Endpunkte

Endpunkte geben einen numerischen Vektor zur letzten Beobachtung in jeder Periode durch auf angegeben entspricht, mit einer Null in den des Vektors Anfang hinzugefügt, und der Index der die letzte Beobachtung in x bei das Ende.

Gültige Werte für das Argument sind: „us“ (Mikrosekunden), „Mikrosekunden“, „ms“ (Millisekunden), „Millisekunden“, „s“ (Sekunden), „Sekunden“, „Min“ Minuten, Minuten, Stunden, Tage, Wochen, Monate, Quartale und Jahre.

Die Antwort auf Ihre zweite Frage ist nein, es gibt keine Möglichkeit, dies zu tun. Aber Sie könnten immer das letzte Datum manuell bearbeiten, wenn Sie alle Daten trotzdem verpackt präsentieren, sehe ich keinen Schaden darin.

2

Nein, Sie können es nicht zwingen, Ihnen den Sonntag zu geben.

Da der Index des Ergebnisses der period.apply von

ep <- endpoints(myTs,'weeks') 

myTs[ep] 
      [,1] 
2012-12-02 2 
2012-12-09 9 
2012-12-10 10 

So gegeben ist, müssen Sie das letzte Datum verschieben. Leider bietet xts diese Option nicht an, Sie können keinen einzelnen Wert des Index verschieben. Ich weiß nicht, warum (vielleicht eine Design-Wahl eindeutigen Index erhalten)

zB Sie können die fließende tun:

ts.weeks <- apply.weekly(myTs, colSums) 
ts.weeks[length(ts.weeks)] <- last(index(myTs)) + 7-last(floor(diff(ep)))