gpt4 book ai didi

r - 从 R 中的分钟数据创建 15 分钟的时间间隔?

转载 作者:行者123 更新时间:2023-12-02 12:27:43 24 4
gpt4 key购买 nike

我有一些数据,其格式如下:

time     count 
00:00 17
00:01 62
00:02 41

所以我有从 00:00 到 23:59 的时间,每分钟有一个计数器。我想以 15 分钟为间隔对数据进行分组,这样:

time           count
00:00-00:15 148
00:16-00:30 284

我尝试过手动执行此操作,但这很累人,所以我确信必须有一个函数或某物可以轻松完成此操作,但我还没有弄清楚如何执行此操作。

我真的很感谢一些帮助!

非常感谢!

最佳答案

对于 POSIXct 格式的数据,您可以使用 cut 函数创建 15 分钟分组,然后按这些组进行聚合。下面的代码展示了如何在 base R 中以及使用 dplyrdata.table 包执行此操作。

首先,创建一些虚假数据:

set.seed(4984)
dat = data.frame(time=seq(as.POSIXct("2016-05-01"), as.POSIXct("2016-05-01") + 60*99, by=60),
count=sample(1:50, 100, replace=TRUE))

基础R

将数据切割为 15 分钟组:

dat$by15 = cut(dat$time, breaks="15 min")
                   time count                by15
1 2016-05-01 00:00:00 22 2016-05-01 00:00:00
2 2016-05-01 00:01:00 11 2016-05-01 00:00:00
3 2016-05-01 00:02:00 31 2016-05-01 00:00:00
...
98 2016-05-01 01:37:00 20 2016-05-01 01:30:00
99 2016-05-01 01:38:00 29 2016-05-01 01:30:00
100 2016-05-01 01:39:00 37 2016-05-01 01:30:00

现在通过新的分组列进行聚合,使用sum作为聚合函数:

dat.summary = aggregate(count ~ by15, FUN=sum, data=dat)
                 by15 count
1 2016-05-01 00:00:00 312
2 2016-05-01 00:15:00 395
3 2016-05-01 00:30:00 341
4 2016-05-01 00:45:00 318
5 2016-05-01 01:00:00 349
6 2016-05-01 01:15:00 397
7 2016-05-01 01:30:00 341

dplyr

library(dplyr)

dat.summary = dat %>% group_by(by15=cut(time, "15 min")) %>%
summarise(count=sum(count))

数据表

library(data.table)

dat.summary = setDT(dat)[ , list(count=sum(count)), by=cut(time, "15 min")]

更新:要回答评论,对于本例,每个分组间隔的终点为 as.POSIXct(as.character(dat$by15)) + 60*15 - 1 。换句话说,分组间隔的终点是从间隔开始算起的 15 分钟减去 1 秒。我们添加 60*15 - 1,因为 POSIXct 以秒为单位。 as.POSIXct(as.character(...)) 是因为 cut 返回一个因子,这只是将其转换回日期时间,以便我们可以进行数学运算在上面。

如果您希望终点为下一个间隔之前最近的分钟(而不是最近的秒),您可以as.POSIXct(as.character(dat$by15)) + 60*14.

如果您不知道休息间隔,例如,因为您选择了休息次数并让 R 选择间隔,则可以通过执行 max(unique(diff( as.POSIXct(as.character(dat$by15))))) - 1

关于r - 从 R 中的分钟数据创建 15 分钟的时间间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36827572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com