2015-07-18 27 views
5

Voglio dividere un oggetto xts giornaliero in 4 settimane separate che corrispondono ai seguenti giorni del mese: 1 ° -7 °, 8 ° -14 °, 15 ° -21 ° e 22 ° al fine del mese, dove l'ultima settimana sarà generalmente più lunga (ma va bene!).Oggetto xts diviso per intervalli irregolari specificati in R

Ecco qualche esempio di codice di un oggetto XTS per gennaio 2004 creato da una sequenza di date:

week <- seq(from=as.Date("2004-01-01"), to=as.Date("2004-01-31"), by = "day") 
x2 <- sample(1:50, 31) # generating 31 random numbers 
January_series <- xts(x2, order.by=week) # create January daily series 

Il problema è che 1 gennaio non si verifica su un Domenica modo split.xts non significa necessariamente fare ciò che Voglio.

Inizialmente pensavo di poter creare quattro intervalli corrispondenti a quei giorni indicati sopra, ma non so se sia l'approccio giusto.

C'è un modo per suddividere un oggetto xts in base agli intervalli che hai creato?

risposta

3

È possibile utilizzare .indexmday per ottenere il giorno del mese per ogni osservazione nell'oggetto xts. Quindi utilizzare cut per definire gli intervalli da dividere per.

intervals <- cut(.indexmday(January_series), c(0,7,14,21,31), paste0("W",1:4)) 
splitlist <- split(January_series, intervals) 
+1

Sembra che ci sia un errore in ".indexmday'. '.indexmday (January_series)' mi dà 31, 1, 2, .... con xts 0.9.7 su R 3.2.1. –

+0

@ G.Grothendieck: c'è, ma [è stato corretto] (https://github.com/joshuaulrich/xts/issues/3). –

+0

@JoshuaUlrich Grazie ancora. Ho un'altra domanda su questo però - E se la serie di gennaio fosse invece una serie giornaliera più grande che va da gennaio a dicembre, divisa per mese, e ognuna aveva più colonne. Quindi dovrei passare attraverso ogni colonna e dividere ogni intervallo di split mensile negli intervalli di settimane sopra? –