在r中减去时间

Sab*_*len 3 format time r

我有一个包含两个时间变量的数据集:EndVisitTimeBoxTime.我每天都制作数据集(因此这些观察结果都在一天内完成):

Date<-"2014-8-12"
EndVisitTime<-c("00:00:32",  "00:04:52",  "00:10:01", "00:23:38",  "00:31:28") # class: factor
BoxTime<-as.integer(c("341",  "229", "301",  "810",  "363")) # class integer in seconds
df<-data.frame(Date, EndVisitTime, BoxTime)
Run Code Online (Sandbox Code Playgroud)

我想计算StartVisitTime; 就是这样EndVisitTime - BoxTime.

当前一天开始访问时,我希望获得正确的开始日期(date = 2014-8-11).我的问题是如何减去BoxTime(以秒为单位)EndVisitTime以获得正确StartVisitTime的权利StartDate

我已经尝试了几个选项,我不能再进一步了,因为他们不断添加当前日期或结果为0到1的特性,无法转换为时间 - 日期格式.

# This is my most successful attempt
df$EndTime<-strptime(df$EndVisitTime, format="%H:%M:%S")
df$BoxTime<-as.numeric(df$BoxTime)
library("chron")
df$x<-chron(times=(df$BoxTime/(60*60*24)))
df$StartVisitTime<-df$EndTime-df$x ### This does not work!
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助!

use*_*377 6

使用POSIXct日期,可以直接添加秒.

样本数据

df<-data.frame(EndVisitTime=c("00:00:32",  "00:04:52",  "00:10:01", "00:23:38",  "00:31:28"),
               BoxTime=c("341",  "229", "301",  "810",  "363"),
               Date = "2014-8-12",stringAsFactor=FALSE)
Run Code Online (Sandbox Code Playgroud)

将日期和时间合并为一个字符串

df$EndTimeStr<-do.call(paste, df[,c("Date", "EndVisitTime")])
Run Code Online (Sandbox Code Playgroud)

转换为POSIXct时间

df$EndTime<-as.POSIXct(df$EndTimeStr,format="%Y-%m-%d %H:%M:%S")
Run Code Online (Sandbox Code Playgroud)

减去秒数

df$BoxTime<-as.numeric(df$BoxTime)
df$StartVisitTime<-df$EndTime-df$BoxTime 
df
Run Code Online (Sandbox Code Playgroud)

参考如何在POSIXlt时间内添加/减去时间,同时保持其在R中的类?