我正在尝试按以下格式减去包含日期时间信息的2个字符向量:
> dput(train2)
structure(list(time2 = c("2011-09-01 23:44:52.533", "2011-09-05 12:25:37.42",
"2011-08-24 12:56:58.91", "2011-10-25 07:18:14.722", "2011-10-25 07:19:51.697"
), time3 = c("2011-09-01 23:43:59.752", "2011-09-05 12:25:01.187",
"2011-08-24 12:55:13.012", "2011-10-25 07:16:51.759", "2011-10-25 07:16:51.759"
)), .Names = c("time2", "time3"), row.names = c(NA, 5L), class = "data.frame")
我一直在寻找并使用zoo
,as.Date
,as.POSIXct
等等来尝试找到正确的代码来减去2个日期时间对象并在几秒钟内得到答案但是没有运气。
我很感激任何建议。
答案 0 :(得分:21)
> x1<-"2013-03-03 23:26:46.315"
> x2<-"2013-03-03 23:31:53.091"
> x1 <- strptime(x1, "%Y-%m-%d %H:%M:%OS")
> x2 <- strptime(x2, "%Y-%m-%d %H:%M:%OS")
> x1
[1] "2013-03-03 23:26:46"
> x2
[1] "2013-03-03 23:31:53"
我按照@Dirk Eddelbuettel的回答,但我正在失去精确度。如何强制R不切割第二部分?
谢天谢地(strptime的人)我自己回答了我的问题:
op <- options(digits.secs = 3)
应用此设置后,将使用精度。
http://stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html
如果您希望在几秒钟内获得差异,但在几分钟内获得,则可能会有用:
> as.numeric(x2-x1,units="secs")
[1] 306.776
答案 1 :(得分:14)
容易腻:
R> now <- Sys.time()
R> then <- Sys.time()
R> then - now
Time difference of 5.357 secs
R> class(then - now)
[1] "difftime"
R> as.numeric(then - now)
[1] 5.357
R>
对于您的数据:
R> df
time2 time3
1 2011-09-01 23:44:52.533 2011-09-01 23:43:59.752
2 2011-09-05 12:25:37.42 2011-09-05 12:25:01.187
3 2011-08-24 12:56:58.91 2011-08-24 12:55:13.012
4 2011-10-25 07:18:14.722 2011-10-25 07:16:51.759
5 2011-10-25 07:19:51.697 2011-10-25 07:16:51.759
R> df$time2 <- strptime(df$time2, "%Y-%m-%d %H:%M:%OS")
R> df$time3 <- strptime(df$time3, "%Y-%m-%d %H:%M:%OS")
R> df
time2 time3
1 2011-09-01 23:44:52.533 2011-09-01 23:43:59.752
2 2011-09-05 12:25:37.420 2011-09-05 12:25:01.187
3 2011-08-24 12:56:58.910 2011-08-24 12:55:13.012
4 2011-10-25 07:18:14.722 2011-10-25 07:16:51.759
5 2011-10-25 07:19:51.697 2011-10-25 07:16:51.759
R> df$time2 - df$time3
Time differences in secs
[1] 52.781 36.233 105.898 82.963 179.938
attr(,"tzone")
[1] ""
R>
并以数字形式添加回数据框:
R> df$dt <- as.numeric(df$time2 - df$time3)
R> df
time2 time3 dt
1 2011-09-01 23:44:52.533 2011-09-01 23:43:59.752 52.781
2 2011-09-05 12:25:37.420 2011-09-05 12:25:01.187 36.233
3 2011-08-24 12:56:58.910 2011-08-24 12:55:13.012 105.898
4 2011-10-25 07:18:14.722 2011-10-25 07:16:51.759 82.963
5 2011-10-25 07:19:51.697 2011-10-25 07:16:51.759 179.938
R>