閾值量的支持,可以說我有一個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