从R中的大型数据集生成每周平均图

时间:2014-07-13 16:03:59

标签: r datetime

我是R的新手,并且一直在努力尝试转换我的数据,并且可以使用一些急需的帮助。 我的数据框大约是。 70000 * 2。该数据涵盖整整一年(52周/ 365天)。它的一部分看起来像这样:

Create.Date.Time    Ticket.ID
1   2013-06-01 12:59:00 INCIDENT684790
2   2013-06-02 07:56:00 SERVICE684793
3   2013-06-02 09:39:00 SERVICE684794
4   2013-06-02 14:14:00 SERVICE684796
5   2013-06-02 17:20:00 SERVICE684797
6   2013-06-03 07:20:00 SERVICE684799
7   2013-06-03 08:02:00 SERVICE684839
8   2013-06-03 08:04:00 SERVICE684841
9   2013-06-03 08:04:00 SERVICE684842
10  2013-06-03 08:08:00 SERVICE684843

我试图获得每周每小时(即小时1到小时168)的门票数量。第1小时将于周一00.00开始,小时168将于周日23.00-23.59开始。这将每周重复一次。我想使用Create.Date.Time数据来计算票证所在的小时,例如:

2013-06-01 12:59:00 INCIDENT684790 - hour 133, 
2013-06-03 08:08:00 SERVICE684843 - hour 9

然后我将每小时做平均值并绘制那些。我完全不知道从哪里开始。有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

在解决问题的绘图方面之前,这是您尝试获取的数据格式吗?这使用您可能必须安装的包lubridateinstall.packages("lubridate",dependencies=TRUE))。

library(lubridate)
##
Events <- paste(
  sample(c("INCIDENT","SERVICE"),20000,replace=TRUE),
  sample(600000:900000,20000)
)
t0 <- as.POSIXct(
  "2013-01-01 00:00:00",
  format="%Y-%m-%d %H:%M:%S",
  tz="America/New_York")
Dates <- sort(t0 + sample(0:(3600*24*365-1),20000))
Weeks <- week(Dates)
wDay <- wday(Dates,label=TRUE)
Hour <- hour(Dates)
##
hourShift <- function(time,wday){
  hShift <- sapply(wday, function(X){
    if(X=="Mon"){
      0
    } else if(X=="Tues"){
      24*1
    } else if(X=="Wed"){
      24*2
    } else if(X=="Thurs"){
      24*3
    } else if(X=="Fri"){
      24*4
    } else if(X=="Sat"){
      24*5
    } else {
      24*6
    }
  })
  ##
  tOut <- hour(time) + hShift + 1
  return(tOut)
}
##
weekHour <- hourShift(time=Dates,wday=wDay)
##
Data <- data.frame(
  Event=Events,
  Timestamp=Dates,
  Week=Weeks,
  wDay=wDay,
  dayHour=Hour,
  weekHour=weekHour,
  stringsAsFactors=FALSE)
##

这会给你:

> head(Data)
            Event           Timestamp Week wDay dayHour weekHour
1  SERVICE 783405 2013-01-01 00:13:55    1 Tues       0       25
2 INCIDENT 860015 2013-01-01 01:06:41    1 Tues       1       26
3 INCIDENT 808309 2013-01-01 01:10:05    1 Tues       1       26
4 INCIDENT 835509 2013-01-01 01:21:44    1 Tues       1       26
5  SERVICE 769239 2013-01-01 02:04:59    1 Tues       2       27
6  SERVICE 762269 2013-01-01 02:07:41    1 Tues       2       27