R中的时间计算单位

Units of time calculation in R

这是我 have.I 的数据示例 dates.I 使用函数 as.POSIXct() 将读取日期列转换为日期格式。

data$readdate=as.POSIXct(data$readdate,format="%Y-%m-%d %H:%M:%S")

ID   readdate                   tdiff
A    2016-06-01 06:00:06          0
B    2016-06-01 06:01:06          1
C    2016-06-01 06:03:06          2
D    2016-06-01 06:04:06          1
E    2016-06-01 06:04:56          50
F    2016-06-01 08:04:56          2

我需要第三列 tdiff 来显示两个 ID 之间经过的时间's.I 使用了循环并且

for(i in 1:nrow(data)){
tdiff=data$readdate[i+1]-data$readdate[i]}

使用此方法的问题是 R 将 time.I 的单位四舍五入希望 tdiff 列由类似于此的单一类型的单位(例如秒或分钟)组成

ID   readdate                   tdiff(seconds)  or tdiff(mins)
A    2016-06-01 06:00:06          0                    0
B    2016-06-01 06:01:06          60                   1
C    2016-06-01 06:03:06          120                  2
D    2016-06-01 06:04:06          60                   1
E    2016-06-01 06:04:56          50                   0.5
F    2016-06-01 08:04:56          7200                 120

我需要它们都相似,因为稍后我必须提取所有 tdiff 大于 30 分钟的 ID。

我认为最简单的方法是将 difftime 与您想要的单位一起使用 c("auto", "secs", "mins", "hours", " days", "weeks")

秒使用:

difftime(data$readdate[i+1], data$readdate[i], units="secs")

这应该只是一个 diff 操作,它将调度到 diff.POSIXt:

dif <- diff(dat$readdate)
dif
#Time differences in secs
#[1]   60  120   60   50 7200
c(0, dif)
#[1]    0   60  120   60   50 7200

如果您需要更改测量单位,只需使用 units<-

units(dif) <- "mins"
c(0, dif)
#[1]   0.0000000   1.0000000   2.0000000   1.0000000   0.8333333 120.0000000

如果你比较棘手,也可以在线执行此操作:

c(0, `units<-`(diff(dat$readdate), "mins"))
#[1]   0.0000000   1.0000000   2.0000000   1.0000000   0.8333333 120.0000000