r - 在R中将数据拆分为指定的时间间隔
问题描述
我发现这篇文章很有帮助,但我仍有一些问题。我正在使用df
以下数据:
date download
6 2018-07-10 08:57:12 1.47
7 2018-07-10 08:59:00 0.57
8 2018-07-10 09:01:00 0.16
9 2018-07-10 09:05:11 0.08
10 2018-07-10 09:09:12 0.09
11 2018-07-10 09:13:11 0.14
我想要做的是能够根据小时将数据分成 15 分钟、30 分钟和 60 分钟的块(因此间隔将是 0:00、0:15、0:30、0:45、 0:60 如果它是基于 15 分钟的块分开的。目前我正在使用这个代码:
split(df, cut(df$date, breaks = "hour"))
在小时的情况下,哪种情况完全符合我的要求并返回以下结果:
$`2018-07-10 08:00:00`
date download
6 2018-07-10 08:57:12 1.47
7 2018-07-10 08:59:00 0.57
$`2018-07-10 09:00:00`
date download
8 2018-07-10 09:01:00 0.16
9 2018-07-10 09:05:11 0.08
10 2018-07-10 09:09:12 0.09
这正是我正在寻找的结果,因为它严格按小时(08:00-08:59、09:00-09:45 等)分隔数据。但是,当我这样做时:
split(df, cut(df$date, breaks = "30 min"))
我最终得到以下结果:
$`2018-07-10 08:57:00`
date download
6 2018-07-10 08:57:12 1.47
7 2018-07-10 08:59:00 0.57
8 2018-07-10 09:01:00 0.16
9 2018-07-10 09:05:11 0.08
10 2018-07-10 09:09:12 0.09
11 2018-07-10 09:13:11 0.14
虽然它按 30 分钟(或 15)间隔对其进行分组,但它在最早的时间开始该间隔,在本例中为 08:57:00,而不是从小时 (09:00:00) 开始。我怎样才能做到这一点,以便在尝试获得 15 和 30 分钟的间隔时,它们会像小时间隔一样按小时开始?
这篇文章解决了这个问题,但你最终会在时间范围内计算事件数,而且它也不是很优雅/灵活。我希望坚持使用拆分和剪切,因为我正在制作一个闪亮的应用程序,并且似乎更容易进行交互(即有一个带有间隔的下拉菜单,可以很容易地直接插入到拆分代码中)。
谢谢!
解决方案
低于起点(必须微调边界)。
想法是生成切点:在日期(时间)上使用时,seq
允许为参数指定以天、小时、分钟为单位的时间范围by
。
library(lubridate)
date=ymd_hms(
c("2018-07-10 08:57:12",
"2018-07-10 08:59:00",
"2018-07-10 09:01:00",
"2018-07-10 09:05:11",
"2018-07-10 09:09:12",
"2018-07-10 09:13:11"))
download = round(runif(length(date),min=1,max=10))
df <- data.frame(date, download)
from=round(min(df$date),"hour")-hours(1)
to=round(max(df$date),"hour")+hours(1)
breaks=seq(from, to, by="30 min")
split(df,cut(df$date, breaks))
导致
$`2018-07-10 08:00:00`
[1] date download
<0 rows> (or 0-length row.names)
$`2018-07-10 08:30:00`
date download
1 2018-07-10 08:57:12 4
2 2018-07-10 08:59:00 7
$`2018-07-10 09:00:00`
date download
3 2018-07-10 09:01:00 5
4 2018-07-10 09:05:11 1
5 2018-07-10 09:09:12 3
6 2018-07-10 09:13:11 4
$`2018-07-10 09:30:00`
[1] date download
<0 rows> (or 0-length row.names)
推荐阅读
- dart - 如何在 Flutter 中使用 bloc 模式在 UI 上显示函数回调和错误?
- haskell - 如何为具有不同构造函数 Haskell 的类型实例化 Eq(或任何类)
- javascript - 如何从对象数组中获取唯一的类别数据
- java - Java上字符串添加的奇怪行为
- c++ - c++ 中有没有办法使用点运算符而不是 -> 来表示 pSomePointer->pValue->nSubvalue
- go - 如何在 golang 中实例化函数类型?
- laravel - 无法使用带有 Laravel 5.4 的 sendgrid 发送电子邮件并发现错误
- c# - 以低角度旋转图像并清晰保存(C#)
- google-maps - 如何使用下拉菜单在谷歌地图上设置标记?
- ios - IOS 媒体播放器 - 跳到特定时间