2015-05-28 15 views
9

Chcę odjąć od POSIXct. Mogę to zrobić, ale w zależności od pierwszego rzędu (chyba?) Różnica będzie w sekundach lub minutach. Poniżej można zobaczyć pierwsza edycja jest w sekundach i druga edycja jest w minutach, bo zmienił różnicę czasową w pierwszym rzędzie:Sposób różnicowania czasu w tych samych jednostkach podczas odejmowania 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 

wyniki:

> #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 

Chciałbym różnicę ZAWSZE być w sekundach bez względu na różnicę w pierwszym rzędzie. Czy istnieje sposób, aby to się stało?

Dziękuję.

+3

'difftime (t1, t2, jednostek =„SEC”)' –

+2

Lub, jeśli chcesz użyć '-' zamiast' difftime', zmień jednostkę poprzez 'jednostki <-'. Na przykład: 'x <-d $ t1-d $ t2; jednostki (x) <- "secs" ' – nicola

+2

@ user20650, dodano OK. Nadzieja, że ​​nicola nie ma nic przeciwko, że ja też wymieszałem jego komentarz. –

Odpowiedz

14

Można użyć difftime za to zaproponować, która pozwala na określenie jednostki miary, na przykład

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

Innym sposobem (jak wspomniano przez @nicola i jest obecny w tej samej dokumentacji) to wykorzystać fakt, że - ma metodę -.POSIXt i zastąpić jednostek pomiarowych po operacji odejmowania stosując metodę units<- zamienne

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

jednostki (res) <- "secs" wydaje się nieprawidłowe. będzie również czytać 6 dni jako 6 sekund – HappyCoding

+0

@HappyCoding Nie jesteś pewien co masz na myśli. 'res <- as.POSIXct (" 2015-05-02 20:18:02 00:00:00 ") - as.POSIXct (" 2015-02-02 20:18:02 00:00:00 "); jednostki (res) <- "secs" 'wydają się działać dobrze. –

+0

tak, powyżej może działać. Moja wina. wydaje się, że może działać tylko z elementem zamiast wektora lub ramki danych. mój kod przykładowy '' '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

Powiązane problemy