R 计算午夜后的小时数

问题描述 投票:0回答:1

我想使用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。

我的问题是:是否有一个代码可以考虑到所有这些场景?

r time lubridate
1个回答
0
投票

以下代码将实现您正在寻找的内容,尽管它可能很难概括。

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()
删除了
:
之后的所有内容。

© www.soinside.com 2019 - 2024. All rights reserved.