R组时间列按条件例如。每小时

时间:2017-04-03 04:42:34

标签: r data.table

我有一个如下所示的时间栏。

Tcol <- as.data.table(c(1211, 1237, 2106, 1348, 2136, 1745, 1740, 1330, 1755, 1939, 2326, "NA"))
Tcol$V1= as.numeric(gsub("\\D+", "", Tcol$V1))
Tcol$V1[is.na(Tcol$V1)] <- 100
Tcol$V1 <- chron::chron(times=Tcol$V1)

Glimpse(Tcol)
Observations: 12
Variables: 1
$ V1 <S3: times> 1211, 1237, 2106, 1348, 2136, 1745, 1740, 1330, 1755, 1939, 2326,  100

我想将它们分组1小时或2小时块进行绘图。即

100   1
1200  2
1300  2
1700  3
1900  1
2300  1

在SO上搜索其他解决方案,似乎我应该使用cut()。但每次我应用cut()时,都会出错。

table(cut(Tcol$V1, breaks="hour"))
Error in breaks + 1 : non-numeric argument to binary operator

我无法找到解决我的问题的同一问题的其他帖子。所以我希望有人可以提供帮助。

2 个答案:

答案 0 :(得分:0)

如果我说得对,那么您的V1列包含格式为hm的时间。 我不明白你要使用chron函数完成什么,但在你的位置,我会从V1提取一小时,然后再使用它。

# for 1 hour intervals:
Tcol[, h := as.integer(substr(V1, 1, 2))]
Tcol[, .N, by = h]

#for different intervals
breaks <- seq(0, 24, by = 2) # define breaks
Tcol[, newintervals := cut(h, breaks = breaks)]
Tcol[, .N, by = newintervals]

答案 1 :(得分:0)

Tcol[,.(Count=length(.I)),by=.(Hour=100*floor(V1/100))]