2012-12-19 6 views
5

Sto cercando di capire cosa utilizza lo xts (o lo zoo) come il tempo trascorso dopo aver applicato un periodo applicativo. Si consideri il seguente:Forzare settimane intere con 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 

penso che il '2012-12-02' significa "per la settimana terminata il 2012/12/02, la somma è di 1". Quindi in pratica il tempo è la fine della settimana.

Ma il problema è con quel "2012/12/11" - io penso quello che sta facendo sta dicendo che il 11 è l'ultimo giorno della settimana che è stato dato, quindi è dando che, come il tempo .

C'è un modo per costringerlo a dare la domenica su cui finisce, anche se quel giorno non è stato incluso nel set di dati?

risposta

3

Prova questa:

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

dove nextsun è stato derivato da codice nextfri dato nello zoo quick reference sostituendo 5 (per venerdì) con 0 (per domenica).

3

Queste sono settimane intere. Ti mostra solo la data dell'ultima osservazione. Vedere ?endpoints (apply.weekly, è essenzialmente un involucro sottile per gli endpoint).

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

Da? Endpoint

endpoint restituisce un vettore numerico corrispondente all'ultima osservazione in ciascun periodo specificato sopra, con uno zero aggiunto al inizio del vettore, e l'indice di l'ultima osservazione in x a alla fine.

valori validi per l'argomento segnaliamo: “noi” (microsecondi), “microsecondi”, “MS” (millisecondi), “millisecondi”, “secondi” (secondi), “secondi”, “min” (minuti), "minuti", "ore", "giorni", "settimane", "mesi", "quarti" e "anni".

La risposta alla seconda domanda è no, non è possibile farlo. Ma puoi sempre modificare manualmente l'ultima data, se hai intenzione di presentare comunque tutti i dati avvolti, non vedo alcun danno.

2

No, non puoi costringerlo a darti la domenica.

Poiché l'indice del risultato di period.apply è dato da

ep <- endpoints(myTs,'weeks') 

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

Quindi è necessario spostare l'ultima data. Sfortunatamente xts non offre questa opzione, non puoi spostare un singolo valore dell'indice. Non so perché (forse una scelta di progettazione ottenere indice univoco)

ad esempio è possibile effettuare le scorrente:

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