阈值量的支持,可以说我有一个data.table
它看起来像这样计算基于R中data.table
customer TranAmount
1: 146506 1290.49
2: 146506 2699.00
3: 146506 2720.00
4: 146506 2700.00
5: 146506 6.35
6: 146506 2700.00
7: 146506 2705.00
8: 146506 2691.00
9: 146506 500.00
10: 146506 500.95
11: 146506 52.00
现在我要计算每个量support
,通过support
我的意思是,如果我选择 一笔交易,并且存在处于该交易阈值内的交易,则该交易的support
等于该限额内的交易数量。
例如,在上述数据,对于TranAmount
2700.00,如果我们考虑的1%的阈值(上述2700.00或低于2700.00),那么有该范围内的6个交易,所以support
为TranAmount 2700.00
是6
我已经写了这个功能,但它的速度很慢,当然不是在data.table
的方式,但它做的工作,我相信有更好的方法来实现这一点,但我不能想到任何。
get_support <- function(dt,val_tolerance=0.01) {
support_dt <- dt[,.(customer,TranAmount)][order(TranAmount)]
support_dt[,support:= 0]
for(i in 1:nrow(support_dt)) {
start <- support_dt[i,TranAmount]
current_support <- support_dt[i,support]
amount_limit <- c((start - start*val_tolerance),(start + start*val_tolerance))
for (j in 1:nrow(support_dt)){
amount <- support_dt[j,TranAmount]
if(between(amount,amount_limit[1],amount_limit[2]) ==TRUE){
current_support <- current_support+1
}else{
current_support <- current_support
}
}
#print(current_support)
support_dt[i,support:=current_support]
}
print(support_dt)
}
请建议更好的方法来实现相同。
这就是真的哈克:d – Bg1850