2016-09-29 43 views
0

我怎樣才能extarct這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 

規則,我想只提取第一行中,我只有一個231050

回答

2

arules具有subset功能(見?arules::subset),你可以用它來繪製的滿足您的條件規則的一個子集 - 就像LHS具體項目,最小支持等:在第二行

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

偉大的解決方案。我會重寫你的子集爲 rules.sub < - 子集(規則,lhs%在%項目和大小(lhs)== 1) 明確說明你想要什麼項目在lhs和規則的lhs只能包括一個項目(即lhs的大小爲1)。你也可以用'['作爲常規子集重寫它: rules.sub < - rules [lhs(rules)%in%item&size(lhs(rules))== 1] –

+0

就是這樣!我正在尋找'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

我得到的錯誤:在strsplit錯誤(DF $ rules,split =「=>」):非字符參數 – Kaja

+1

將規則列轉換爲字符,更新了代碼。 –

+0

lhs.items錯誤[[indices]]:遞歸索引失敗在2級 – Kaja