根据时间查找日期

时间:2015-10-18 14:08:42

标签: r date datetime dplyr lubridate

我在考虑如何根据时间找到日期(表中不存在)。

示例:请记住,我只有时间

time = c("9:44","15:30","23:48","00:30","05:30", "15:30", "22:00", "00:45")

我知道开始日期是2014-08-28,但我如何得到午夜后更改的日期。

预期结果将是

9:44   2014-08-28
15:30  2014-08-28
23:48  2014-08-28
00:30  2014-08-29
05:30  2014-08-29
15:30  2014-08-29
22:00  2014-08-29
00:45  2014-08-30

4 个答案:

答案 0 :(得分:3)

以下是使用data.tableITime类的示例,它可以让您操作时间(将time转换为此类后,您现在可以减去/添加分钟/小时/等。)< / p>

library(data.table)
time <- as.ITime(time)
Date <- as.IDate("2014-08-28") + c(0, cumsum(diff(time) < 0))

data.table(time, Date)
#        time       Date
# 1: 09:44:00 2014-08-28
# 2: 15:30:00 2014-08-28
# 3: 23:48:00 2014-08-28
# 4: 00:30:00 2014-08-29
# 5: 05:30:00 2014-08-29
# 6: 15:30:00 2014-08-29
# 7: 22:00:00 2014-08-29
# 8: 00:45:00 2014-08-30

答案 1 :(得分:1)

使用chron包我们假设较晚的时间是在同一天,而较早的时间是在第二天:

library(chron)
date <- as.Date("2014-08-28") + cumsum(c(0, diff(times(paste0(time, ":00"))) < 0))
data.frame(time, date)

,并提供:

   time       date
1  9:44 2014-08-28
2 15:30 2014-08-28
3 23:48 2014-08-28
4 00:30 2014-08-29
5 05:30 2014-08-29
6 15:30 2014-08-29
7 22:00 2014-08-29
8 00:45 2014-08-30

答案 2 :(得分:0)

这是一种方法:

time = c("9:44","15:30","23:48","00:30","05:30", "15:30", "22:00", "00:45")
times <- sapply(strsplit(time, ":", TRUE), function(x) Reduce("+", as.numeric(x) * c(60, 1)))
as.POSIXct("2014-08-28") + times + 60*60*24*cumsum(c(F, tail(times < lag(times), -1)))
# [1] "2014-08-28 00:09:44 CEST" "2014-08-28 00:15:30 CEST" "2014-08-28 00:23:48 CEST" "2014-08-29 00:00:30 CEST" "2014-08-29 00:05:30 CEST" "2014-08-29 00:15:30 CEST" "2014-08-29 00:22:00 CEST" "2014-08-30 00:00:45 CEST"

答案 3 :(得分:0)

您可以将系统日期与时间连接并获得结果。例如,在Oracle中,我们可以将时间日期视为:

to_char(sysdate,'DD-MM-RRRR')|| ' ' || To_char(sysdate,'HH:MIAM')

这将导致例如。 12-09-2015 09:50 AM

根据您的要求,请将其用作:

 to_char(sysdate,'DD-MM-RRRR')|| ' 00:45' and so on.