我有一个包含两个时间变量的数据集:EndVisitTime和BoxTime.我每天都制作数据集(因此这些观察结果都在一天内完成):
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)
非常感谢您的帮助!
使用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中的类?