【问题标题】:Subtract time in r在 r 中减去时间
【发布时间】:2014-10-13 14:32:25
【问题描述】:

我有一个包含两个时间变量的数据集: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)。 我的问题是如何从EndVisitTime 中减去BoxTime(以秒为单位)以得到正确的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!

非常感谢和希望您的帮助!!!

【问题讨论】:

  • 你能添加一个创建df的代码序列,然后对df进行计算。

标签: r time format


【解决方案1】:

使用 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?

【讨论】:

  • 感谢您的意见!这已经非常接近了!但是,我想要正确的日期而不是当前日期。现在它给出的是 10 月 12 日而不是 8 月 11 日。
  • OK,把日期和结束时间拼接起来,转换成posixct,减去盒子时间,就得到开始时间;答案已更新。
  • 感谢您的意见!现在运行顺利!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多