将时间序列数据分成时间间隔(比如一个小时),然后绘制计数

我只有一个时间序列的数据文件:

'2012-02-01 17:42:44' '2012-02-01 17:42:44' '2012-02-01 17:42:44' 

…我想分开数据,以便在小时之前计数。 说:

 '2012-02-01 17:00:00' 20 '2012-02-01 18:00:00' 30 

“20”和“30”表示该期间的时间序列条目的数量。 我希望能够绘制出“计数”的时间。 我怎样才能做到这一点与R?

这是我目前的线图图。

 library(ggplot2) req <- read.table("times1.dat") summary(req) da <- req$V2 db <- req$V1 time <- as.POSIXct(db) png('time_data_errs.png', width=800, height=600) gg <- qplot(time, da) + geom_line() print(gg) dev.off() 

这听起来像你想用cut来找出一个小时内有多less个值。

如果你可以提供一些样本数据,这通常是有帮助的。 这里有一些:

 set.seed(1) # So you can get the same numbers as I do MyDates <- ISOdatetime(2012, 1, 1, 0, 0, 0, tz = "GMT") + sample(1:27000, 500) head(MyDates) # [1] "2012-01-01 01:59:29 GMT" "2012-01-01 02:47:27 GMT" "2012-01-01 04:17:46 GMT" # [4] "2012-01-01 06:48:39 GMT" "2012-01-01 01:30:45 GMT" "2012-01-01 06:44:13 GMT" 

你可以使用tablecut (使用参数breaks="hour" (参见?cut.Date获取更多信息))来查找每小时的频率。

 MyDatesTable <- table(cut(MyDates, breaks="hour")) MyDatesTable # # 2012-01-01 00:00:00 2012-01-01 01:00:00 2012-01-01 02:00:00 2012-01-01 03:00:00 # 59 73 74 83 # 2012-01-01 04:00:00 2012-01-01 05:00:00 2012-01-01 06:00:00 2012-01-01 07:00:00 # 52 62 64 33 # Or a data.frame if you prefer data.frame(MyDatesTable) # Var1 Freq # 1 2012-01-01 00:00:00 59 # 2 2012-01-01 01:00:00 73 # 3 2012-01-01 02:00:00 74 # 4 2012-01-01 03:00:00 83 # 5 2012-01-01 04:00:00 52 # 6 2012-01-01 05:00:00 62 # 7 2012-01-01 06:00:00 64 # 8 2012-01-01 07:00:00 33 

最后,这里是MyDatesTable对象的线图:

 plot(MyDatesTable, type="l", xlab="Time", ylab="Freq") 

在这里输入图像描述


cut可以处理一定范围的时间间隔。 例如,如果您想每隔30分钟列表一次,则可以轻松地修改breaks参数以处理该事件:

 data.frame(table(cut(MyDates, breaks = "30 mins"))) # Var1 Freq # 1 2012-01-01 00:00:00 22 # 2 2012-01-01 00:30:00 37 # 3 2012-01-01 01:00:00 38 # 4 2012-01-01 01:30:00 35 # 5 2012-01-01 02:00:00 32 # 6 2012-01-01 02:30:00 42 # 7 2012-01-01 03:00:00 39 # 8 2012-01-01 03:30:00 44 # 9 2012-01-01 04:00:00 25 # 10 2012-01-01 04:30:00 27 # 11 2012-01-01 05:00:00 33 # 12 2012-01-01 05:30:00 29 # 13 2012-01-01 06:00:00 29 # 14 2012-01-01 06:30:00 35 # 15 2012-01-01 07:00:00 33 

更新

既然你试图用ggplot2进行绘图, ggplot2是一种方法(不知道这是否是最好的,因为我需要的时候通常使用base R的graphics)。

创build表格的data.frame (如上所示)并添加一个虚拟的“group”variables并绘制如下:

 MyDatesDF <- data.frame(MyDatesTable, grp = 1) ggplot(MyDatesDF, aes(Var1, Freq)) + geom_line(aes(group = grp)) 

在这里输入图像描述