arules:apriori
関数を使用してRでアソシエーションルールマイニングを実行したいとし、transactions
タイプの入力が必要です。これは、各要素がそのトランザクションで購入された一意の製品セットを表す要因のリストにすぎません。パッケージのドキュメントでbase:split()implementation - R/data.table内のより高速なオプション
products transaction
1 {a,b} 1
2 {a,b,c} 2
3 {b} 3
、彼らはそうのように、これを生成するsplit
の使用をお勧めします:以下の例
split(DT[,"products",with=FALSE], DT[,"transaction",with=FALSE])
しかし、私は取引の大規模なセットで同じことをしようとすると、それは痛々しいほど遅いです。例MWE以下:
library(data.table)
#Number of transactions
ntrxn = 1000000
#Generating a dummy transactions table
#Recycling transaction vector over products
DT = data.table(transaction = seq(1,ntrxn,1)
,products = rep(letters[1:3],ntrxn))[order(transaction)]
TEST = split(DT[,"products",with=FALSE], DT[,"transaction",with=FALSE])
data.table
by
条件を活用することで、これをスピードアップする方法はありますか? (後知恵で理にかなっている)
DT[,list(as.factor(.SD$products)),by=transaction]
しかし、それはちょうどdata.table
を私に戻っています:私はこれを試してみました。同様の表現を使用しているが、演奏者のdata.table
内部を活用して重い吊り上げを処理する方法のリストがあります。
ここで答えがdata.table
だけではない場合は、私が探している出力にどのアプローチが必要なのか本当に不思議です。リスト列にするために、コードのOPの最後の行をラップ
'system.time(lst < - split(DT $ products、DT $ transaction))'と 'system.time(lst < - split(DT"、 "products"、= F)、DT [ "トランザクション"、= F])) 'あなたがそれから得るものを見てください。ほぼ2桁の差異。なぜそれが起こっているのか分かりませんが、私は前のものがあなたが行かなければならないものだと思います。 – Psidom
@Psidomも 'system.time(split(DT [、products]、DT [、transaction]))'を比較する - 問題は 'with = FALSE'です – thelatemail
2つの違いの世界があります!私は後者が終了するのを待っていませんでした。あなたに質問する - 構文1と構文2の違いは何ですか? – sriramn