使用R中的cut()函数将日期转换为15分钟间隔的结果不可预测

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用R中的cut()函数将日期转换为15分钟间隔的结果不可预测相关的知识,希望对你有一定的参考价值。

确定,这让我发疯。

我有几个具有时间值的数据集,需要将其汇总为15分钟的间隔。

我在这里找到了一个可以很好地在一个数据集上工作的解决方案。但是在下一个尝试中,我得到的结果很奇怪。我有一列包含代表日期的字符数据:

                 BeginTime
-------------------------------
    1           1/3/19 1:50 PM
    2           1/3/19 1:30 PM
    3           1/3/19 4:56 PM
    4          1/4/19 11:23 AM
    5           1/6/19 7:45 PM
    6          1/7/19 10:15 PM
    7          1/8/19 12:02 PM
    8          1/9/19 10:43 PM

而且我正在使用以下代码(这与我在其他数据集中使用的名称完全相同)

df$by15 = cut(mdy_hm(df$BeginTime), breaks="15 min")

但是我得到的是:

                    BeginTime              by15
-------------------------------------------------------
    1           1/3/19 1:50 PM      2019-01-03 13:36:00
    2           1/3/19 1:30 PM      2019-01-03 13:21:00
    3           1/3/19 4:56 PM      2019-01-03 16:51:00
    4          1/4/19 11:23 AM      2019-01-04 11:21:00
    5           1/6/19 7:45 PM      2019-01-06 19:36:00
    6          1/7/19 10:15 PM      2019-01-07 22:06:00
    7          1/8/19 12:02 PM      2019-01-08 11:51:00
    8          1/9/19 10:43 PM      2019-01-09 22:36:00
    9         1/10/19 11:25 AM      2019-01-10 11:21:00

关于为什么我会得到这样的随机时间而不是我想要的15分钟间隔的任何建议?就像我说的那样,这在其他数据集上效果很好。

答案

您可以使用lubridate :: round_date()函数,该函数将如下汇总日期时间数据;

library(lubridate) # To handle datetime data
library(dplyr) # For data manipulation

# Creating dataframe
df <-
  data.frame(
    BeginTime = c("1/3/19 1:50 PM", "1/3/19 1:30 PM", "1/3/19 4:56 PM",
                  "1/4/19 11:23 AM", "1/6/19 7:45 PM", "1/7/19 10:15 PM",
                  "1/8/19 12:02 PM", "1/9/19 10:43 PM")
  )

df %>%
  # First we parse the data in order to convert it from string format to datetime
  mutate(by15 = parse_date_time(BeginTime, '%d/%m/%y %I:%M %p'),
         # We roll up the data/round it to 15 minutes interval
         by15 = round_date(by15, "15 mins"))
# 
# BeginTime                by15
# 1/3/19 1:50 PM   2019-03-01 13:45:00
# 1/3/19 1:30 PM   2019-03-01 13:30:00
# 1/3/19 4:56 PM   2019-03-01 17:00:00
# 1/4/19 11:23 AM  2019-04-01 11:30:00
# 1/6/19 7:45 PM   2019-06-01 19:45:00
# 1/7/19 10:15 PM  2019-07-01 22:15:00
# 1/8/19 12:02 PM  2019-08-01 12:00:00
# 1/9/19 10:43 PM  2019-09-01 22:45:00

以上是关于使用R中的cut()函数将日期转换为15分钟间隔的结果不可预测的主要内容,如果未能解决你的问题,请参考以下文章

优化 R 中的时间序列聚合

将 dplyr 函数 group_by() 与 cut() 一起使用

将年时日期间隔转换为天数

DateTimePicker - 如何将时间间隔设置为 20 分钟、一周中允许的特定日期和一天中的时间?

使用不同的时间间隔合并并填充Pandas中的两个数据帧

如何将秒转换为R中的日期