R中的分箱时间序列?

时间:2013-12-09 00:19:30

标签: r timestamp binning

我是R.的新手。我的数据有600k个对象,由三个属性定义:IdDateTimeOfCall

TimeofCall格式为00:00:00,范围从00:00:0023:59:59

我想将TimeOfCall属性分为24个分箱,每个分箱代表每小时一次(第一个分机00:00:0000:59:59等等)。

有人可以告诉我如何做到这一点吗?我尝试使用cut(),但显然我的格式不是数字。提前谢谢!

2 个答案:

答案 0 :(得分:1)

虽然您可以转换为正式的时间表示,但在这种情况下,使用substr可能更容易:

test <- c("00:00:01","02:07:01","22:30:15")
as.numeric(substr(test,1,2))
#[1]  0  2 22

使用POSIXct时间来处理它也会有效,如果您计划进一步计算(时间上的差异等),可能会很方便:

testtime <- as.POSIXct(test,format="%H:%M:%S")
#[1]"2013-12-09 00:00:01 EST" "2013-12-09 02:07:01 EST" "2013-12-09 22:30:15 EST"
as.numeric(format(testtime,"%H"))
#[1]  0  2 22

答案 1 :(得分:0)

您可以使用cut.POsixlt功能。但是你应该将数据强制转换为有效的时间对象。我在hms使用了方便的lubridate。并strftime获取时间格式。

library(lubridate)
x <- c("09:10:01", "08:10:02",  "08:20:02","06:10:03 ", "Collided at 9:20:04 pm")
x.h <- strftime(cut(as.POSIXct(hms(x),origin=Sys.Date()),'hours'),
         format='%H:%M:%S')

data.frame(x,x.h)

                       x      x.h
1               09:10:01 10:00:00
2               08:10:02 09:00:00
3               08:20:02 09:00:00
4              06:10:03  07:00:00
5 Collided at 9:20:04 pm 22:00:00