2016-09-29 7 views
0

私はlhs一つだけの特別なアイテムの関連解析に特別なルールを抽出

1 {231050}      => {231051} 0.06063479 1.0000000 16.492183 
2 {231050,231051}    => {275001} 0.05490568 0.9055145 6.576661 
3 {231050,275001}    => {231051} 0.05490568 1.0000000 16.492183 

を表示されたルールをextarctすることができますどのように私は一つだけ231050

答えて

2

arulessubset機能を有していますあなたの基準を満たすルールのサブセットを描画するために使用できる、(?arules::subsetを参照してください) - LHS上の特定の項目、最小サポートなどのように:strsplitでエラーが発生しました(DFの$:私はエラーを取得する2行目の

library(arules) 
data("Adult") 
rules <- apriori(Adult, parameter = list(supp = 0.5, conf = 0.9, minlen = 2)) 
item <- "race=White" 
rules.sub <- subset(rules, lhs %in% item & size(lhs)==1) 
inspect(rules.sub) 
# lhs    rhs       support confidence lift  
# 7 {race=White} => {native-country=United-States} 0.7881127 0.9217231 1.0270761 
# 8 {race=White} => {capital-gain=None}   0.7817862 0.9143240 0.9966616 
# 9 {race=White} => {capital-loss=None}   0.8136849 0.9516307 0.9982720 
+2

すばらしい解決策。私はあなたのサブセットを、lhs内でどの項目を明示し、ルールのlhsだけがそうであるかを明示する rules.sub - サブセット(ルール、%item&size(lhs)== 1のlhs%) 1つの項目を含む(つまり、lhsのサイズは1です)。あなたはまた、 '['を: として規則的なサブセットとして書き直すこともできます。 –

+0

それはそれです!私は 'size'を探していて、それをdocで見つけられませんでした。だから、 'サブセット(ルール、%item&size(lhs)== 1のlhs%)'にしましょう。ありがとう... – lukeA

0

これを試してきた中で最初の行だけを抽出したいと思います(ルールは、アプリオリを使用して生成されると仮定):

df <- as(rules, 'data.frame') 
df$rules <- as.character(df$rules) 
lhs <- do.call(rbind, strsplit(df$rules, split='=>'))[,1] 
lhs.items <- strsplit(lhs, split=',') 
indices <- which(lapply(lhs.items, length) == 1) 
special.item <- '231050' 
special.indices <- which(grepl(special.item, lhs.items[[indices]])) 
selected.rules <- df[special.indices,] 
selected.rules 

    rules  support confidence   lift 
1 {231050}=>{231051} 0.06063479   1 16.49218 
+0

rules、split = "=>"):文字以外の引数 – Kaja

+1

ルールの列を文字に変換し、コードを更新しました。 –

+0

lhs.items [[indices]]のエラー:レベル2で再帰的インデックス作成に失敗しました – Kaja

関連する問題