2011-02-01 23 views
7

Ho un set di dati che codifica una data-ora in due variabili separate. Normalmente, li incollerei semplicemente all'interno di un as.POSIXct e proseguo. Tuttavia, la data viene fornita come una stringa e l'ora del giorno come una frazione di 24 ore - ad esempio, 12pm è 0.5, 9:30 am è 0.1458333, ecc.Converti frazione di giorno in tempo POSIX in R

Non sembra così difficile da convertire i giorni frazionari in ore dell'orologio, ma preferirei usare una funzione preesistente se possibile. Esiste qualcosa del genere nella base R? Un pacco?

Se è utilizzato, questo è un campo ora di Excel (xlsx) importato in R attraverso RODBC.

EDIT Stranamente, dopo aver rivisitato questo problema, i tempi vengono ora letti come POSIXct. Non sono sicuro di cosa farne.

+0

Haha. Sembra la mia esperienza nella lettura di un file xls. Un giorno scrivo codice R per convertire da una data numerica di Excel, poi una settimana dopo modifico il xls con alcuni nuovi dati, e quando lo leggo in R, le date sono testo. Puoi risolvere il problema con la formattazione della cella in Excel per risolverlo. –

+0

Se si applica un formato personalizzato a un dat-time in Excel, i valori che arrivano nei file csv di testo seguiranno tale formato. Suggerire o 'aaaa-mm-gg hh: mm: ss AM/PM' o 'aaaa-mm-gg hh: mm: ss'. Non ho configurato RODBC quindi non posso testare per vedere se ciò potrebbe influenzare il trasferimento del DB. –

risposta

5

valori POSIXct sono semplicemente il numero di secondi a partire dalla mezzanotte GMT 1970-01-01. (Quindi è necessario prestare attenzione al proprio offset rispetto a UTC.) È possibile utilizzare la parte di data e aggiungere il numero di giorni di 24 * 3600 (come.Date (dtval) al valore temporale * 24 * 3600. Gabor ha sottolineato articolo in R News (che ha scritto, grazie, Gabor.)

Non hai dato un esempio della stringa Se stai ricevendo la tua data come stringa, allora as.Date (strDate) convertirà un variabile "strDate" alla classe Date quando è nel formato "AAAA-MM-GG" o "AAAA/MM/GG". Altrimenti i codici di formattazione sono nella pagina "strptime"

Una volta che hai un POSIXct- variabile classificata è possibile aggiungere solo il numero di secondi.Questo esempio aggiunge 30 minuti a mezzanotte oggi 1 febbraio 2011 (nel mio fuso orario che è UTC-5):

> as.POSIXct(as.Date("2011-02-01")) +30*60 
[1] "2011-01-31 19:30:00 EST" 

E questo è il vostro valore temporale aggiunto a mezzanotte il mio tempo:

> as.POSIXct(as.Date("2011-02-01 00:00", tzone="UTC"))+3600*5 + 3600*24*timeval 
[1] "2011-02-01 03:29:59 EST" 
+0

Non lo capisco. Cos'è 'timeval' nel secondo blocco di codice? –

+0

È il nome a cui si assegna il valore di 0.1458333. Si moltiplica per il numero di secondi in un giorno. –

+0

Grazie. Ho usato questa idea per eseguire l'operazione inversa: modifica dei tempi di posixCT in giorni frazionari con: (timeval-as.POSIXct (...))/86400. È stato molto utile per eseguire analisi delle serie temporali su basi temporali diverse da Hz, come i cicli al giorno. –

6

Il R News 4/1 Help Desk articolo ha una sezione sulla lettura date di Excel in R.

+0

p. 30, in particolare –