2015-05-28 7 views
9

Voglio sottrarre a POSIXct. Posso farlo ma a seconda della prima riga (credo?) La differenza sarà in secondi o minuti. Qui di seguito potete vedere il primo diff è in pochi secondi e la seconda diff è in minuti perché ho cambiato la differenza di tempo in prima fila:Come fare differenza di orario nelle stesse unità sottraendo POSIXct

#diff in seconds because 1st row time diff is small? 
t1<- as.POSIXct(c("2015-02-02 20:18:03 00:00:00", "2015-02-02 20:17:02 00:00:00"),"GMT") 
t2<- as.POSIXct(c("2015-02-02 20:18:02 00:00:00","2015-02-02 20:18:02 00:00:00"),"GMT") 
d<-data.frame(t1= t1, t2= t2) 
d$t1-d$t2 


#diff in seconds because 1st row time diff is larger? 
t1<- as.POSIXct(c("2015-02-02 20:13:03 00:00:00", "2015-02-02 20:17:02 00:00:00"),"GMT") 
t2<- as.POSIXct(c("2015-02-02 20:18:02 00:00:00","2015-02-02 20:18:02 00:00:00"),"GMT") 
d<-data.frame(t1= t1, t2= t2) 
d$t1-d$t2 

risultati:

> #diff in seconds because 1st row time diff is small? 
> t1<- as.POSIXct(c("2015-02-02 20:18:03 00:00:00", "2015-02-02 20:17:02 00:00:00"),"GMT") 
> t2<- as.POSIXct(c("2015-02-02 20:18:02 00:00:00","2015-02-02 20:18:02 00:00:00"),"GMT") 
> d<-data.frame(t1= t1, t2= t2) 
> d$t1-d$t2 
Time differences in secs 
[1] 1 -60 
> 
> 
> #diff in seconds because 1st row time diff is larger? 
> t1<- as.POSIXct(c("2015-02-02 20:13:03 00:00:00", "2015-02-02 20:17:02 00:00:00"),"GMT") 
> t2<- as.POSIXct(c("2015-02-02 20:18:02 00:00:00","2015-02-02 20:18:02 00:00:00"),"GMT") 
> d<-data.frame(t1= t1, t2= t2) 
> d$t1-d$t2 
Time differences in mins 
[1] -4.983333 -1.000000 

Vorrei che la differenza SEMPRE essere in pochi secondi, indipendentemente dalla differenza della prima riga. C'è un modo per farlo accadere?

Grazie.

+3

'difftime (t1, t2, unità = "sec")' –

+2

Oppure, se vuoi usare '-' invece di' difftime', cambia l'unità con 'units <-'. Ad esempio: 'x <-d $ t1-d $ t2; unità (x) <- "secs" ' – nicola

+2

@ user20650, aggiunto Ok. Spero che a nicola non dispiaccia che ho mescolato anche il suo commento. –

risposta

14

È possibile utilizzare difftime per quella proponi che consente di specificare le unità di misura, ad esempio

difftime(t1, t2, units = "secs") 

Un altro modo (come menzionato da @nicola ed è presente nella stessa documentazione) è quello di approfittare di il fatto che - ha un metodo -.POSIXt e sovrascrivere le unità di misura dopo l'operazione di sottrazione utilizzando il metodo units<- sostituzione

res <- t1 - t2 
units(res) <- "secs" 
+0

unità (res) <- "secs" sembra non corretto. leggerà anche 6 giorni come 6 secondi – HappyCoding

+0

@HappyCoding Non sei sicuro di cosa intendi. 'res <- as.POSIXct (" 2015-05-02 20:18:02 00:00:00 ") - as.POSIXct (" 2015-02-02 20:18:02 00:00:00 "); unit (res) <- "secs" 'sembra funzionare bene. –

+0

sì, sopra può funzionare. Colpa mia. sembra che possa funzionare solo con elementi invece che con vettori o frame dati. il mio esempio di codice '' '> res <- as.POSIXct (" 2015-05-02 20:18:02 00:00:00 ") - as.POSIXct (" 2015-02-02 20:18:02 00: 00:00 ") > res <- rbind (res, res) > as.numeric (res, units =" secs ")' '' – HappyCoding

Problemi correlati