【发布时间】:2015-01-19 02:59:15
【问题描述】:
我创建了一些基本代码来实现我所需要的,但它非常慢,因为它是糟糕的代码。目的是从 SE 列中取出一行,如果它与 SC 列匹配,则为其所属的每个 5 分钟括号将计数器加 1。
我写的代码是
for (i in 1:(nrow(SC)))
for(j in 1:(nrow(SE)))
for (k in 0:5)
if ( (SE[j,3]==SC[i,1]) &
(as.POSIXlt(SE[j,1])>as.POSIXlt(SC[i,4]) +k*5*60)&
(as.POSIXlt(SE[j,1])<=as.POSIXlt(SC[i,4])+ (k+1)*5*60 ) &
(SE[j,2]==1) )
{ SC[i,6+k]=SC[i,6+k]+1 }
也就是说,检查 SC 的每个单元格以查看条件是否相同(房间号相同,时间是否适合时间括号等)。
这非常低效,因为三重循环在 R 中需要很长时间。正在寻找替换循环的方法,也许是向量或应用?
> SE
UTC pin Room
1 2014-12-22 10:14:34 1 Alpha
4 2014-12-22 10:15:27 1 Alpha
5 2014-12-22 10:16:00 1 Alpha
8 2014-12-22 10:18:10 1 Alpha
12 2014-12-22 10:19:06 1 Alpha
13 2014-12-22 10:20:00 1 Alpha
14 2014-12-22 10:08:34 1 Beta
17 2014-12-22 10:15:29 1 Beta
18 2014-12-22 10:16:00 1 Beta
19 2014-12-22 10:17:00 1 Beta
22 2014-12-22 10:18:10 1 Beta
24 2014-12-22 10:19:00 1 Beta
26 2014-12-22 10:19:11 1 Beta
28 2014-12-22 10:09:34 1 Gamma
29 2014-12-22 10:39:11 1 Gamma
> SC
Room Capacity Video.Conference ST ET
1 Alpha 16 1 2014-12-22 10:00:00 2014-12-22 10:30:00
2 Alpha 16 1 2014-12-22 10:30:00 2014-12-22 11:00:00
3 Beta 16 1 2014-12-22 10:00:00 2014-12-22 10:30:00
4 Beta 16 1 2014-12-22 10:30:00 2014-12-22 11:00:00
5 Gamma 10 0 2014-12-22 10:00:00 2014-12-22 10:30:00
6 Gamma 10 0 2014-12-22 10:30:00 2014-12-22 11:00:00
>Desired #This is the intended output
X Room Capacity Vid ST ET X0.to.5.min X5.to.10.min X10.to.15.min X15.to.20.min X20.to.25.min X25.to.30.min
1 Alpha 16 1 2014-12-22 10:00:00 2014-12-22 10:30:00 0 0 1 5 0 0
2 Alpha 16 1 2014-12-22 10:30:00 2014-12-22 11:00:00 0 0 0 0 0 0
3 Beta 16 1 2014-12-22 10:00:00 2014-12-22 10:30:00 0 1 0 6 0 0
4 Beta 16 1 2014-12-22 10:30:00 2014-12-22 11:00:00 0 0 0 0 0 0
5 Gamma 10 0 2014-12-22 10:00:00 2014-12-22 10:30:00 0 1 0 0 0 0
6 Gamma 10 0 2014-12-22 10:30:00 2014-12-22 11:00:00 0 1 0 0 0 0
【问题讨论】:
标签: r performance for-loop