在r中减去时间

时间:2014-10-13 14:32:25

标签: r time format

我有一个包含两个时间变量的数据集: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)

我想计算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!

非常感谢您的帮助!!!

1 个答案:

答案 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?