【发布时间】:2015-12-16 19:24:40
【问题描述】:
我试图弄清楚如何根据到达和呼叫时间设置队列。基本上我想要一列显示当时排队的人数。我希望能够在一个人到达时加 1,并在一个人被呼叫时减 1。关于如何做到这一点的任何想法?最好不依赖循环。下面是前20行数据:
df[1:20,]
Date_of_Service Ticket Arrival_Time Call_Time
1 09/01/2015 1 6:40:04 7:31:09
2 09/01/2015 2 6:59:14 7:32:24
3 09/01/2015 3 6:59:36 7:33:47
4 09/01/2015 4 7:00:16 7:30:04
5 09/01/2015 5 7:11:10 7:35:34
6 09/01/2015 6 7:11:55 7:36:51
7 09/01/2015 7 7:17:09 7:30:48
8 09/01/2015 8 7:21:33 7:37:38
9 09/01/2015 9 7:21:53 7:34:39
10 09/01/2015 10 7:22:28 7:38:32
11 09/01/2015 11 7:24:18 7:38:40
12 09/01/2015 12 7:25:08 7:39:55
13 09/01/2015 13 7:26:18 7:40:14
14 09/01/2015 14 7:26:34 7:42:21
15 09/01/2015 15 7:30:09 7:36:22
16 09/01/2015 16 7:30:24 7:42:36
17 09/01/2015 17 7:39:47 7:43:20
18 09/01/2015 18 7:46:20 7:47:22
19 09/01/2015 19 7:46:36 7:47:30
20 09/01/2015 20 7:48:46 7:49:44
我将数据转换为 POSIXlt 并尝试运行一个无效的循环:
arrival <- paste(as.character(df$Date_of_Service), as.character(df$Arrival_Time))
call <- paste(as.character(df$Date_of_Service), as.character(df$Call_Time))
arrival <- as.POSIXlt(arrival, tz="", format="%m/%d/%Y %H:%M:%S")
call <- as.POSIXlt(call, tz="", format="%m/%d/%Y %H:%M:%S")
queue <- rep(0, length(arrival))
queue[1] <- 1
x <- 1
y <- 2
while(x < 1+length(call)){
while(y < 1+length(arrival)){
ifelse(difftime(call[x], arrival[y], units="secs") > 0,
queue[y] <- queue[y-1] + 1,
queue[y] <- queue[y-1] - 1)
y <- y+1
}
x <- x+1
}
有什么建议吗?
【问题讨论】: