我想使用R来计算R中两个军事时间(例如13:00和7:00)之间的时间差。假设我有以下数据表:
id | 开始时间 | 结束时间 |
---|---|---|
1 | 18:00 | 2:00 |
2 | 18:00 | 20:00 |
3 | 2:00 | 4:00 |
我想计算start.time和end.time之间的时间差。我希望我的结果如下:
id | 开始时间 | 结束时间 | 差异 |
---|---|---|---|
1 | 18:00 | 2:00 | 8 |
2 | 18:00 | 20:00 | 2 |
3 | 2:00 | 4:00 | 2 |
as.posixct() 和 difftime() 我尝试使用 as.posixct(start.time, format = '%H:%M') 和 as.posixct(end.time, format = '%H:%M') 来转动 start.time 和 end .time 转换为 datetime 类,并使用 difftime() 查找它们之间的时间差。这仅适用于 2 和 3。对于第一个,as.posixct() 参数将所有时间转换为相同的日期,因此它们之间的差异不等于 8。
我的问题是:是否有一个代码可以考虑到所有这些场景?
以下代码将实现您正在寻找的内容,尽管它可能很难概括。
data<-data.frame(
id=c(1,2,3),
start.time=c("18:00","18:00","2:00"),
end.time=c("2:00","20:00","4:00")
)
library(tidyverse)
data<-mutate(data,
start.time=as.numeric(gsub("\\:.*","",start.time)),
end.time=as.numeric(gsub("\\:.*","",end.time)),
diff=ifelse(end.time>start.time,end.time-start.time,
(24-start.time)-end.time))
如果
end.time
更大,您只需从 start.time
中减去 end.time
即可。如果start.time
较大,则先用24减去start.time
,然后再减去end.time
。这取决于分钟是否无关紧要,因为我已经使用 gsub()
删除了 :
之后的所有内容。