这是我拥有的数据的示例。我有包含读取日期的列。我使用函数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。
答案 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