2011-10-13 14 views
6

Ho un oggetto xts, x. Voglio eseguire un ciclo for fino a una determinata ora, in base all'indicatore orario nell'indice.Ottieni il tempo dall'indice xts

> index(x) 
[1] "2011-10-12 16:44:00 SAST" 

Diciamo che voglio fare funzionare il mio ciclo fino a quando il tempo l'indice è inferiore a dire 16:40:00. Come posso rimuovere il componente orario, dato il formato dell'indice sopra?

risposta

4

Questo dovrebbe farti entrare nel parco dove vuoi essere. Usando format, si estrae solo la parte delle ore, dei minuti e dei secondi. La pagina di aiuto per ?strptime fornisce ulteriori dettagli sui simboli utilizzati per l'estrazione di informazioni.

#if you don't have your string in an appropriate format yet 
(x <- strptime("2011-10-12 16:44:00 SAST", format = "%Y-%m-%d %H:%M:%S")) 
    [1] "2011-10-12 16:44:00" 
class(x) 
    [1] "POSIXlt" "POSIXt" 
(new.x <- format(x, format = "%H:%M:%S")) 
    [1] "16:44:00" 
+0

grazie, funziona un fascino. una domanda però, per confrontare questa componente temporale con un tempo arbitrario, diciamo alle 16:00:00, come potrei fare a riguardo? Ho provato: if (new.x> strptime ("16:00:00", "% H:% M:% S"), ma non sembra prenderlo, dato che il nuovo.x è uno storico valore e la nuova ora ha la data odierna –

+0

@ED Immagino che potrei creare una nuova variabile con data allegata o avere anche la tua variabile attuale con data. –

2

Il problema è ottenere il fuso orario corretto. Sul mio sistema l'tz spec di "SAST" non è valido, ma forse sul vostro sarà:

x[ index(x) < as.POSIXct("2011-10-12 16:44:00", tz= SAST") ] 

(. Sembra essere UTC +2) e mi prendo quello che ho detto sul mio sistema non riconoscerla .

as.POSIXct("2011-10-12 16:44:00", tz= "Africa/Johannesburg") 
# [1] "2011-10-12 16:44:00 SAST" 

in modo da utilizzare:

x[ index(x) <= as.POSIXct("2011-10-12 16:44:00", tz= "Africa/Johannesburg")] 
Problemi correlati