R &引用;POSIXct“&引用;POSIXt“;计算中的事件数

R &引用;POSIXct“&引用;POSIXt“;计算中的事件数,r,date,R,Date,我有以下数据结构: myDF <- data.frame(as.POSIXct(c("2010-02-16 12:45:37 CST", "2010-02-16 13:22:23 CST", "2010-02-16 13:49:47 CST", "2010-02-16 14:23:13 CST"

我有以下数据结构:

myDF <- data.frame(as.POSIXct(c("2010-02-16 12:45:37 CST", 
                                "2010-02-16 13:22:23 CST", 
                                "2010-02-16 13:49:47 CST", 
                                "2010-02-16 14:23:13 CST", 
                                "2010-02-16 16:29:17 CST",
                                "2010-02-16 16:49:26 CST")))
colnames(myDF) <- c("DateTimeArrival")

使用
trunc
将日期/时间切回小时,然后
aggregate

trtimes <- as.POSIXct(trunc(myDF$DateTimeArrival, units="hours")) + 3599

aggregate(
  Count ~ Time,
  merge(
    list(Time=seq(min(trtimes), max(trtimes), by="hour")),
    list(Time=trtimes, Count=1),
    all.x=TRUE
  ),
  FUN=sum, 
  na.rm=TRUE,
  na.action=na.pass
)

#                 Time Count
#1 2010-02-16 12:59:59     1
#2 2010-02-16 13:59:59     2
#3 2010-02-16 14:59:59     1
#4 2010-02-16 15:59:59     0
#5 2010-02-16 16:59:59     2

trtimes使用
trunc
将日期/时间切回小时,然后
aggregate

trtimes <- as.POSIXct(trunc(myDF$DateTimeArrival, units="hours")) + 3599

aggregate(
  Count ~ Time,
  merge(
    list(Time=seq(min(trtimes), max(trtimes), by="hour")),
    list(Time=trtimes, Count=1),
    all.x=TRUE
  ),
  FUN=sum, 
  na.rm=TRUE,
  na.action=na.pass
)

#                 Time Count
#1 2010-02-16 12:59:59     1
#2 2010-02-16 13:59:59     2
#3 2010-02-16 14:59:59     1
#4 2010-02-16 15:59:59     0
#5 2010-02-16 16:59:59     2

trtimes我们也可以使用
库(data.table)

库(data.table)
##创建间隔表

dtu区间我们也可以使用
库(data.table)

库(data.table)
##创建间隔表

dtu间隔这里是另一个使用
cut
table
的解决方案:

> as.data.frame(table(cut(myDF$DateTimeArrival+3600,
  breaks=seq(as.POSIXct("2010-02-16 11:59:59 PST"),
  by="1 hour", length.out=7))))
                 Var1 Freq
1 2010-02-16 11:59:59    0
2 2010-02-16 12:59:59    1
3 2010-02-16 13:59:59    2
4 2010-02-16 14:59:59    1
5 2010-02-16 15:59:59    0
6 2010-02-16 16:59:59    2

由于11:59到12:59默认编码为11:59,但您希望它编码为12:59,因此我一直在添加
3600
(1小时)。

下面是另一个使用
cut
table
的解决方案:

> as.data.frame(table(cut(myDF$DateTimeArrival+3600,
  breaks=seq(as.POSIXct("2010-02-16 11:59:59 PST"),
  by="1 hour", length.out=7))))
                 Var1 Freq
1 2010-02-16 11:59:59    0
2 2010-02-16 12:59:59    1
3 2010-02-16 13:59:59    2
4 2010-02-16 14:59:59    1
5 2010-02-16 15:59:59    0
6 2010-02-16 16:59:59    2

因为11:59到12:59默认编码为11:59,但您希望它编码为12:59,所以我一直在添加
3600
(1小时)。

不应该
13:59:59
2
?既然有两次
13:…
那么
13:59:59
不应该是
2
?因为有两次:…
非常优雅,你觉得非常优雅,你觉得非常mucho@user6041032-您可以按投票箭头旁边的“勾号”,以显示您已接受的答案;)@user6041032-您可以按投票箭头旁边的“勾号”显示您已接受的答案;)