我在考虑如何根据时间找到日期(表中不存在)。
示例:请记住,我只有时间
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
答案 0 :(得分:3)
以下是使用data.table
包ITime
类的示例,它可以让您操作时间(将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.