【发布时间】:2012-06-21 13:37:36
【问题描述】:
我希望加快循环,根据不同的条件为行分配评级。根据不同的条件分配六个不同的等级(0 到 5)。我尝试使用带有每个条件的 if 语句的 for 循环来执行此操作,但是要经过数百万行,这确实是没有选择的。我什至不知道花了多长时间才完成。在我手动停止它之前它已经运行了几个小时。
规则是:
Rating 0: if df$Bounce >= 75 and df$time<10 and df$view<1
Rating 1: if df$Bounce >= 75 or df$Assist<1
Rating 2: if df$Bounce < 75 and df$Assist<2
Rating 3: if df$Bounce < 75 and df$Assist<3
Rating 4: if df$Bounce < 75 and df$Assist<=4
Rating 5: if df$Bounce < 75 and df$Assist>=5
我的脚本中有更多这些“慢”语句,所以这个问题的答案将加快很多进程!
一个小的示例数据集
tc <- textConnection('
belongID uniqID Bounce Assist time view
1 101 90 10 7 0
1 102 75 0 8 10
2 103 10 30 4 2
2 104 50 3 1 10
2 105 74 2 5 4
3 106 5 1 2 8 ')
df <- read.table(tc,header=TRUE)
结果应该产生相同的数据集,其中包含一个新列 Rating 和根据规则的评级:
belongID uniqID Bounce Assist time view Rating
1 101 90 10 7 0 0
1 102 75 0 8 10 1
2 103 10 30 4 2 5
2 104 50 3 1 10 4
2 105 74 2 5 4 3
3 106 5 1 2 8 2
编辑:更改等级 1 条件!
【问题讨论】:
-
您是否为每种情况实现了单独的
if语句,例如if (df$Bounce >= 75 && df$time < 10 && df$view < 1) df$rating = 0; else if ...或者你做了类似决策树的东西:if (df$Bounce >= 75) { if (df$time < 10 && df$view < 1) df$rating = 0; else if (df$Assist < 1) df$rating = 1; } else { ... }? -
我是第一个! - 还编辑了评分 1 条件
标签: performance r loops