2011-09-24 14 views
6

Diciamo che voglio generare un frame di dati che contiene una colonna con è strutturato nel seguente formato.Creazione di una sequenza di date univoca

2011-08-01 
2011-08-02 
2011-08-03 
2011-08-04 
... 

voglio sapere se è possibile generare questi dati con il comando seq().

Qualcosa di simile a quanto segue: (ovviamente non funziona)

seq(2011-08-01:2011-08-31) 

avrei invece dovuto usare todate e regex per generare questa data in questo formato specifico .

+1

Prova a leggere fino in fondo a '? Seq'. – joran

+1

Si noti che se lo scopo è creare una serie storica con tali date, è possibile evitare di creare questa sequenza in modo esplicito creando un oggetto zooreg. Questo esempio crea una serie temporale di '' zooreg "' i cui valori sono 1, 2, ..., 10 per 10 date consecutive a partire dal 2011-08-01: 'library (zoo); z <- zooreg (1:10, as.Date ("2011-08-01")) '. –

risposta

19

Come ho sottolineato nel mio commento, seq ha metodo per date, seq.Date:

seq(as.Date('2011-01-01'),as.Date('2011-01-31'),by = 1) 
[1] "2011-01-01" "2011-01-02" "2011-01-03" "2011-01-04" "2011-01-05" "2011-01-06" "2011-01-07" "2011-01-08" 
[9] "2011-01-09" "2011-01-10" "2011-01-11" "2011-01-12" "2011-01-13" "2011-01-14" "2011-01-15" "2011-01-16" 
[17] "2011-01-17" "2011-01-18" "2011-01-19" "2011-01-20" "2011-01-21" "2011-01-22" "2011-01-23" "2011-01-24" 
[25] "2011-01-25" "2011-01-26" "2011-01-27" "2011-01-28" "2011-01-29" "2011-01-30" "2011-01-31" 
+0

Documentazione: http://www.inside-r.org/r-doc/base/seq.Date – sshevlyagin

9

ho fatto lo stesso errore con seq() il tentativo di fare una sequenza numerica. Non utilizzare l'operatore ":" tra gli argomenti e dovranno essere date se si desidera creare una sequenza di date. Un altro modo è quello di prendere una data e aggiungere una sequenza numerica inizia con 0:

> as.Date("2000-01-01") + 0:10 
[1] "2000-01-01" "2000-01-02" "2000-01-03" "2000-01-04" "2000-01-05" "2000-01-06" 
[7] "2000-01-07" "2000-01-08" "2000-01-09" "2000-01-10" "2000-01-11" 
7

Si potrebbe provare timeBasedSeq nel pacchetto XTS. Si noti che l'argomento è una stringa e l'uso del doppio punto.

timeBasedSeq("2011-08-01::2011-08-31") 
1

ho dovuto generare un ss da min, e non era facile, ma ho trovato seq.POSIXt in base. Nel tuo caso, vuoi un seq di dati giornalieri dal 2011-08-01 al 2011-08-31. Quindi ti suggerisco

days <- seq(ISOdate(2011,8,1), by = "day", length.out = 31) 
class(days) 
"POSIXct" "POSIXt" 
Problemi correlati