2012-01-16 28 views
5

Nella maggior parte dei casi, convertiamo il tempo numerico in formato posixct utilizzando R. Tuttavia, a volte, vogliamo confrontare quale punto temporale è precedente, quindi preferiremmo il formato orario numerico. Quindi, è una questione abbastanza pratica per convertire il formato orario in numerico. Ad esempio, ho il formato dati come "2001-03-13 10:31:00",Conversione del formato orario in numerico con R

begin <- "2001-03-13 10:31:00" 

Utilizzando R, voglio capire come per convertirlo in una numerico, ad esempio l'ora giuliana, qualcosa come i secondi che passano tra 1970-01-01 00:00:00 e 2001-03-13 10:31:00.

Avete qualche suggerimento?


Il calendario giuliano è iniziata nel 45 aC (709 AUC) come una riforma del calendario romano da Giulio Cesare. Fu scelto dopo la consultazione con l'astronomo Sosigene di Alessandria e fu probabilmente progettato per approssimare l'anno tropicale (noto almeno da Ipparco). vedi http://en.wikipedia.org/wiki/Julian_calendar

+0

non ho downvote, ma ho il sospetto che è stato fatto a causa della mancata corrispondenza tra il incurante ingresso e uscita. Sembra possibile speravi solo di rimuovere la punteggiatura in un vettore di tipo carattere e volevi: 20010313103100 possibilmente come valore numerico ma al momento non è molto chiaro. –

+0

La tua risposta è utile. Rivedrò la domanda –

+4

In generale, 'as.numeric' è un buon primo posto da girare se si desidera convertire qualcosa in, beh, un numero. Hai provato? – joran

risposta

6

Se finite desidera rimuovere ":", "", e "-" da un vettore carattere, quindi questo sarà sufficiente:

end <- gsub("[: -]", "" , begin, perl=TRUE) 
#> end 
#[1] "20010313103100" 

Si consiglia di leggere la sezione circa 1/4 del verso il basso? regex circa classi di caratteri. Poiché "-" è speciale in quel contesto come operatore di intervallo, deve essere posizionato prima o dopo.

Dopo la modifica allora la risposta è chiaramente quello @joran scritto, tranne che si avrebbe bisogno prima di convertire in una classe DateTime:

as.numeric(as.POSIXct(begin)) 
#[1] 984497460 

L'altro punto da fare è che gli operatori di confronto fanno lavoro per le variabili classificate Date e DateTime, quindi la conversione potrebbe non essere affatto necessaria. Ciò a fronte 'inizio' a un tempo di un secondo dopo e correttamente riporta che iniziare è precedente:

as.POSIXct(begin) < as.POSIXct(begin) +1 
#[1] TRUE 
+0

o più in generale 'gsub (" [^ [: digit:]] "," ", begin)' rimuoverà qualsiasi cosa diversa dal numero. – kohske

3

Sulla base della domanda rivisto questo dovrebbe fare quello che vuoi:

begin <- "2001-03-13 10:31:00" 
as.numeric(as.POSIXct(begin)) 

Il risultato è un unix timestamp, il numero di secondi dall'epoca, assumendo che il timestamp sia nel fuso orario locale.

0

L'esempio da ?as.POSIX aiuto dà

as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S")) 

quindi per voi sarebbe

as.numeric(as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S"))) 
Problemi correlati