web-dev-qa-db-ja.com

POSIXctを引くときに同じ単位で時差を作る方法

POSIXctを差し引いたいと思います。私はこれを行うことができますが、最初の行に応じて(私は推測しますか?)違いは数秒または数分になります。以下では、最初の行の時間差を変更したため、最初の差分は秒単位で、2番目の差分は分単位で表示されます。

#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

結果:

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

最初の行の違いが何であれ、常に秒単位の違いが欲しいです。これを実現する方法はありますか?

ありがとうございました。

17
user3022875

たとえば、difftimeを使用して、測定単位を指定できます。たとえば、

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

別の方法(@nicolaで言及され、同じドキュメントに記載されている)は、--.POSIXtメソッドがあることを利用し、units<-置換メソッドを使用した減算演算の後に測定単位をオーバーライドすることです

res <- t1 - t2
units(res) <- "secs"
34
David Arenburg