R中的时间单位计算

时间:2017-11-13 23:44:30

标签: r datetime for-loop time posix

这是我拥有的数据的示例。我有包含读取日期的列。我使用函数as.POSIXct()将readdate列转换为日期格式。

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之间经过的时间。我使用了循环和

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

使用此方法的问题是R舍入时间单位。我希望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。

2 个答案:

答案 0 :(得分:0)

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

秒用:

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

答案 1 :(得分:0)

这应该只是一个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