我有一个包含两个时间变量的数据集: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)
我想计算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!
非常感谢您的帮助!!!
答案 0 :(得分: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)
将日期和时间合并为一个字符串
df$EndTimeStr<-do.call(paste, df[,c("Date", "EndVisitTime")])
转换为POSIXct时间
df$EndTime<-as.POSIXct(df$EndTimeStr,format="%Y-%m-%d %H:%M:%S")
减去秒数
df$BoxTime<-as.numeric(df$BoxTime)
df$StartVisitTime<-df$EndTime-df$BoxTime
df
参考How to add/subtract time from a POSIXlt time while keeping its class in R?