は、私ならば、私はこの計算サポート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
のように見えたdata.table
今、私は私が意味するsupport
により、各量のsupport
を計算したいしているとしましょうトランザクション を選択し、そのトランザクションのしきい値内にあるトランザクションがある場合、そのトランザクションのsupport
は、その制限内のトランザクションの数に等しい。我々は次に、6つのトランザクションは、その範囲内にある(2700.00上または2700.00未満)、1%の閾値を考慮すればTranAmount
2700.00についての上記データ、例えば
2700.00
ため6
あるsupport
私はこの機能を書いていますが、それは遅くて確かに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