如何在计算值后更改difftime的单位,而不是使用单位=" xxx"执行计算时

时间:2015-12-07 14:06:55

标签: r date

我正在减去日期。在以下示例中

bb

FECHA_EFECTO_ESTADO FECHA_ANIVERSARIO_POLIZA
9  2015-11-05 09:49:00               2015-11-05
10 2015-11-05 09:51:00               2015-11-04

列是posixct日期值。要创建一个新变量,这是我可以使用的其他变量的差异:

library (dplyr)
bb<-aa<-mutate(bb, day1=abs(FECHA_EFECTO_ESTADO-FECHA_ANIVERSARIO_POLIZA))
bb
  FECHA_EFECTO_ESTADO FECHA_ANIVERSARIO_POLIZA            day1
1 2015-11-05 09:49:00               2015-11-05  9.816667 hours
2 2015-11-05 09:51:00               2015-11-04 33.850000 hours

默认情况下,day1变量的单位(天,小时,秒)取决于差异的数量。如果我想在几天内有所不同,我可以这样做:

bb<-mutate(bb, day2=abs (difftime(FECHA_EFECTO_ESTADO, FECHA_ANIVERSARIO_POLIZA, units="days" )))
bb
  FECHA_EFECTO_ESTADO FECHA_ANIVERSARIO_POLIZA            day1           day2
1 2015-11-05 09:49:00               2015-11-05  9.816667 hours 0.4090278 days
2 2015-11-05 09:51:00               2015-11-04 33.850000 hours 1.4104167 days

有没有办法在执行计算后指定单位(在这种情况下为天数)?我可能会在分析中发现,我宁愿在数小时内有所不同,所以:
如何更改day1或day2列的单位?
感谢

2 个答案:

答案 0 :(得分:12)

difftime返回的是一个类&#34; difftime&#34;的对象。

其他功能有difftime的方法。例如,要转换为小时数,请将其作为数字:

as.numeric(difftime("2015-12-07", "2015-12-05"), units="hours")
  

[1] 48

或者,要好几周:

as.numeric(difftime("2015-12-07", "2015-12-05"), units="weeks")
  

[1] 0.2857143

此外,您可能会发现记住POSIXct对象实际上是数字很有用!它们代表自‘1970-01-01 00:00.00 UTC’以来经过的秒数(假设格里高利历)。

因此,通常可以方便地考虑固定持续时间的单位时间(即,不是&#34;月&#34;,这不是常数),并使用它进行计算。例如,一旦您的时差以秒为单位,就可以转换为其他常数(技术上有一些非常精细的尺度变化,但大多数应用不需要注意这些细节)时间单位像分钟,小时,天或周。

答案 1 :(得分:3)

现在,感谢@rbatt,我已经意识到,在我的例子中,要更改变量day1的单位,我可以bb$day1<- as.numeric(bb$day1, units="days")

这会将单位改为天数:

FECHA_EFECTO_ESTADO FECHA_ANIVERSARIO_POLIZA            day1           day2
9  2015-11-05 09:49:00               2015-11-05  9.816667 hours 0.4090278 days
10 2015-11-05 09:51:00               2015-11-04 33.850000 hours 1.4104167 days

bb$day1<- as.numeric(bb$day1, units="days")

bb

   FECHA_EFECTO_ESTADO FECHA_ANIVERSARIO_POLIZA      day1           day2
9  2015-11-05 09:49:00               2015-11-05 0.4090278 0.4090278 days
10 2015-11-05 09:51:00               2015-11-04 1.4104167 1.4104167 days