さまざまな条件に基づいて行に評価を割り当てるループを高速化することを目指しています。さまざまな条件に基づいて割り当てられる6つの異なる評価(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)
結果は、新しい列の評価とルールに従った評価を持つ同じデータセットになるはずです。
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の条件を変更しました!