将日期/时间数据分成恒定的时间间隔

时间:2017-05-24 09:31:16

标签: r datetime time split cut

我已经在这里发布了类似的问题:
time split to constant daily intervals and summarise the results

现在我正在尝试一个简单的版本:

我的数据包含对象date/time的{​​{1}}变量(称之为x),格式如下:POSIXct

yyyy-mm-dd HH:MM:SS并不是我真正感兴趣的。我要做的是将date数据拆分为常量时间间隔。

为了说清楚,让我们从一些可重复的例子开始。使用time,我的dput变量如下所示:

x

我已经能够使用:structure(c(1495608914, 1495642528, 1495642529, 1495607831, 1495641488, 1495643715), class = c("POSIXct", "POSIXt"), tzone="")

将其拆分为时间间隔

但是,此方法从split(x, cut((x), "30 mins"))中的最小time值开始分割;但是,我有兴趣将数据拆分为常量时间间隔。

因此,使用上面提到的拆分方法,我将在x开始20个小组,间隔为30分钟(06:37:00将在3个之间分割那20组2,1和3次观察)。虽然我正在寻找关于数据点时间间隔的一些指示:

x

其中1表示x v1 v2 . . . x.ind 06:37:11 14 06:55:14 14 15:58:08 32 . . . ,2表示00:00:00-00:30:00,...,14表示00:30:00-01:00:00,...,48表示06:30:00-07:00:00

1 个答案:

答案 0 :(得分:0)

使用dplyr进行连接和分组以及使用rubridate进行日期舍入的解决方案floor_date

library(dplyr)
library(lubridate)

observations <- data.frame(period = floor_date(x, unit = "30 minutes"), n=rep(1, length(x)))
intervals <- data.frame(period = seq.POSIXt(min(observations), max(observations), by = 30*60))

result <- intervals %>%
  full_join(observations) %>%
  group_by(period) %>%
  summarize(n=sum(n,na.rm= TRUE))