我已经在这里发布了类似的问题:
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
答案 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))