在几天(R)中创建具有相同时间戳的虚拟时间序列

时间:2018-07-20 13:08:53

标签: r time seq

这应该是相当基本的,但是环顾四周并检查一些功能,我似乎无法找到解决方案。

我正在进行一些时间序列预测,并面临一个问题,即我在不同日期的时间戳不规则。我想创建一个虚拟模板,该模板具有固定的时间戳记,可在连续几天中复制该时间戳记。

这可以满足我的要求,但只能使用1天。

dat <- data.table(
  DateTime=format(seq(as.POSIXct("2018-04-01 04:30"), by=("+15 min"), length.out=74), format="%Y-%m-%d %H:%M")
)

            DateTime
 1: 2018-04-01 04:30
 2: 2018-04-01 04:45
 3: 2018-04-01 05:00
 4: 2018-04-01 05:15
 5: 2018-04-01 05:30
 6: 2018-04-01 05:45
 7: 2018-04-01 06:00
 8: 2018-04-01 06:15
 9: 2018-04-01 06:30
10: 2018-04-01 06:45
11: 2018-04-01 07:00
12: 2018-04-01 07:15
13: 2018-04-01 07:30
14: 2018-04-01 07:45
15: 2018-04-01 08:00
16: 2018-04-01 08:15
17: 2018-04-01 08:30
18: 2018-04-01 08:45
19: 2018-04-01 09:00
20: 2018-04-01 09:15
21: 2018-04-01 09:30
22: 2018-04-01 09:45
23: 2018-04-01 10:00
24: 2018-04-01 10:15
25: 2018-04-01 10:30
26: 2018-04-01 10:45
27: 2018-04-01 11:00
28: 2018-04-01 11:15
29: 2018-04-01 11:30
30: 2018-04-01 11:45
31: 2018-04-01 12:00
32: 2018-04-01 12:15
33: 2018-04-01 12:30
34: 2018-04-01 12:45
35: 2018-04-01 13:00
36: 2018-04-01 13:15
37: 2018-04-01 13:30
38: 2018-04-01 13:45
39: 2018-04-01 14:00
40: 2018-04-01 14:15
41: 2018-04-01 14:30
42: 2018-04-01 14:45
43: 2018-04-01 15:00
44: 2018-04-01 15:15
45: 2018-04-01 15:30
46: 2018-04-01 15:45
47: 2018-04-01 16:00
48: 2018-04-01 16:15
49: 2018-04-01 16:30
50: 2018-04-01 16:45
51: 2018-04-01 17:00
52: 2018-04-01 17:15
53: 2018-04-01 17:30
54: 2018-04-01 17:45
55: 2018-04-01 18:00
56: 2018-04-01 18:15
57: 2018-04-01 18:30
58: 2018-04-01 18:45
59: 2018-04-01 19:00
60: 2018-04-01 19:15
61: 2018-04-01 19:30
62: 2018-04-01 19:45
63: 2018-04-01 20:00
64: 2018-04-01 20:15
65: 2018-04-01 20:30
66: 2018-04-01 20:45
67: 2018-04-01 21:00
68: 2018-04-01 21:15
69: 2018-04-01 21:30
70: 2018-04-01 21:45
71: 2018-04-01 22:00
72: 2018-04-01 22:15
73: 2018-04-01 22:30
74: 2018-04-01 22:45

我需要在n天的时间范围内重新创建相同的模式(开始时间:04:30,结束时间:22:45,间隔为15分钟),例如,从'2018-04-01'到'{ {1}}”。有什么简单的方法吗? 谢谢

2 个答案:

答案 0 :(得分:1)

请尝试以下

library(lubridate)

lapply(seq(as.Date('2018-04-01'),as.Date('2018-05-01'),by="day"),function(x) { 
   seq(ymd_hm(paste(x,"04:30")),ymd_hm(paste(x,"22.45")),by="15 mins") });

答案 1 :(得分:1)

如果您希望将它们全部合并为一个列,则可以尝试以下操作:

dat <- data.table(DateTime = do.call("c",lapply(seq.Date(as.Date('2018-02-01'),as.Date('2018-05-31'), by = "day"), function(x) seq(as.POSIXct(paste(x,' 04:30')),as.POSIXct(paste(x,' 22:45')), by = '15 mins'))))