【发布时间】:2019-12-30 07:49:36
【问题描述】:
我有一个数据框,其中包含一个名为DateTime 的变量,其中包含有关日期和时间的数据。下面我举个例子:
df<- data.frame(DateTime=c("2016-08-23 00:22:23","2016-08-23 00:26:38","2016-08-23 01:04:12","2016-08-23 02:27:58","2016-08-23 03:04:31","2016-08-23 04:51:46"))
df$DateTime<- as.POSIXct(df$DateTime, format="%Y-%m-%d %H:%M:%S", tz="UTC")
df
DateTime
1 2016-08-23 00:22:23
2 2016-08-23 00:26:38
3 2016-08-23 01:04:12
4 2016-08-23 02:27:58
5 2016-08-23 03:04:31
6 2016-08-23 04:51:46
我想创建一个名为 DateTime45 的变量,它以 45 分钟的间隔将它们四舍五入为日期和时间。下面我展示了我到目前为止的尝试:
df$DateTime45<- round_date(df$DateTime, "45 mins")
df
DateTime DateTime45
1 2016-08-23 00:22:23 2016-08-23 00:00:00
2 2016-08-23 00:26:38 2016-08-23 00:45:00
3 2016-08-23 01:04:12 2016-08-23 01:00:00
4 2016-08-23 02:27:58 2016-08-23 02:45:00
5 2016-08-23 03:04:31 2016-08-23 03:00:00
6 2016-08-23 04:51:46 2016-08-23 04:45:00
但是,正如您所看到的,它会产生一些奇怪的东西,因为时间间隔不是均匀分布的。我想得到这个:
df
DateTime DateTime45
1 2016-08-23 00:22:23 2016-08-23 00:00:00
2 2016-08-23 00:26:38 2016-08-23 00:45:00
3 2016-08-23 01:04:12 2016-08-23 00:45:00
4 2016-08-23 02:27:58 2016-08-23 02:15:00
5 2016-08-23 03:04:31 2016-08-23 03:00:00
6 2016-08-23 04:51:46 2016-08-23 04:30:00
如果我们考虑 24 小时格式的时间,则 45 个时间间隔的限制如下:
TimeIntervalLimits<- seq.POSIXt(as.POSIXct("2016-08-23 00:00:00"), as.POSIXct("2016-08-24 00:45:00"), by = "45 min", format="%Y-%m-%d %H-%M-%S", tz="UTC")
TimeIntervalLimits<- as.data.frame(TimeIntervalLimits)
TimeIntervalLimits
TimeIntervalLimits
1 2016-08-23 00:00:00
2 2016-08-23 00:45:00
3 2016-08-23 01:30:00
4 2016-08-23 02:15:00
5 2016-08-23 03:00:00
6 2016-08-23 03:45:00
7 2016-08-23 04:30:00
8 2016-08-23 05:15:00
9 2016-08-23 06:00:00
10 2016-08-23 06:45:00
11 2016-08-23 07:30:00
12 2016-08-23 08:15:00
13 2016-08-23 09:00:00
14 2016-08-23 09:45:00
15 2016-08-23 10:30:00
16 2016-08-23 11:15:00
17 2016-08-23 12:00:00
18 2016-08-23 12:45:00
19 2016-08-23 13:30:00
20 2016-08-23 14:15:00
21 2016-08-23 15:00:00
22 2016-08-23 15:45:00
23 2016-08-23 16:30:00
24 2016-08-23 17:15:00
25 2016-08-23 18:00:00
26 2016-08-23 18:45:00
27 2016-08-23 19:30:00
28 2016-08-23 20:15:00
29 2016-08-23 21:00:00
30 2016-08-23 21:45:00
31 2016-08-23 22:30:00
32 2016-08-23 23:15:00
33 2016-08-24 00:00:00
. . .
. . .
有谁知道如何以我想要的方式获取变量DateTime45?
提前致谢
【问题讨论】:
-
圆到最近。或者等效地,添加 22.5 分钟然后向下取整。
标签: r rounding lubridate posixct