【问题标题】:How to make time difference in same units when subtracting POSIXct减去POSIXct时如何以相同的单位产生时间差
【发布时间】:2015-08-11 04:00:32
【问题描述】:

我想减去 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

结果:

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

无论第一行的差异是什么,我都希望差异始终以秒为单位。有没有办法做到这一点?

谢谢。

【问题讨论】:

  • difftime(t1, t2, units = "secs")
  • 或者,如果你想使用-而不是difftime,通过units&lt;-改变单位。例如:x&lt;-d$t1-d$t2; units(x)&lt;-"secs"
  • @user20650,好的添加。希望 nicola 不介意我也混合了他的评论。

标签: r datetime posixct


【解决方案1】:

您可以使用difftime 来指定测量单位,例如

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

另一种方法(如@nicola 所述,并出现在同一文档中)是利用- 具有-.POSIXt 方法这一事实,并在使用units&lt;- 替换的减法运算后覆盖测量单位方法

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

【讨论】:

  • units(res)
  • @HappyCoding 不确定你的意思。 res &lt;- as.POSIXct("2015-05-02 20:18:02 00:00:00") - as.POSIXct("2015-02-02 20:18:02 00:00:00") ; units(res) &lt;- "secs" 似乎工作正常。
  • 是的,上面可以工作。我的错。似乎它只能与元素而不是矢量或数据框一起使用。我的代码示例&gt; res &lt;- as.POSIXct("2015-05-02 20:18:02 00:00:00") - as.POSIXct("2015-02-02 20:18:02 00:00:00") &gt; res &lt;- rbind(res,res) &gt; as.numeric(res,units="secs")
  • @HappyCoding 那是因为rbind 导致它失去了difftime 类,而units 仅适用于该类(如?units 中所述)。这适用于向量,只要它们具有适当的类。例如,试试res &lt;- as.POSIXct(c("2015-05-02 20:18:02 00:00:00", "2015-05-02 20:18:02 00:00:00")) - as.POSIXct(c("2015-02-02 20:18:02 00:00:00", "2015-02-02 20:18:02 00:00:00")) ; units(res) &lt;- "secs"
  • 感谢@David。你是对的。我解决了每个实例的 lappy 问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 2021-07-12
  • 2015-01-20
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
相关资源
最近更新 更多