使用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分钟间隔的结果不可预测的主要内容,如果未能解决你的问题,请参考以下文章
将 dplyr 函数 group_by() 与 cut() 一起使用