2013-07-09 41 views
1
rules <- apriori(table2, parameter = list(minlen=1, sup=s)) 
itemsets <- unique(generatingItemsets(rules)) 
itemsets.df <- as(itemsets, "data.frame") 
F <- as.matrix(itemsets.df[with(itemsets.df, order(-support,items)),]) 

輸出:如何在R中獲得超集?

# items   support 
"{a,b}"    "1.0" 
"{a}"    "1.0" 
"{b}"    "1.0" 
"{c,a,b}"   "0.5" 
"{c,a}"    "0.5" 
"{c,b}"    "0.5" 
"{a,b,d}"   "0.5" 
"{a,d}"    "0.5" 
"{b,d}"    "0.5" 

使用先驗和generatingItemsets得到頻繁事件集,如圖中的 「項目」。但在這種情況下,我只需要輸出超集,即「{c,a,b}」和「{a,b,d}」。我能做些什麼才能在R中獲得超集?

+0

您應該嘗試讓您的示例具有可重現性。函數apriori和generatedItemsets在基數R中不可用。 – asb

回答

1

如果您對項目集進行排序(並刪除花括號), 您要刪除的集合是下一個的前綴。

# Sample data 
library(arules) 
example(apriori) 
itemsets <- unique(generatingItemsets(rules)) 
itemsets.df <- as(itemsets, "data.frame") 
F <- as.matrix(itemsets.df[with(itemsets.df, order(-support,items)),]) 

library(stringr) 
x <- as.character(F[,1]) 
x <- sort(str_replace_all(x, "[{}]", "")) 
x 
i <- seq_len(length(x) - 1) 
to_remove <- str_detect(x[i+1], paste0("^", x[i])) 
x[ ! to_remove ] 
0

我知道這是一個老問題,但它是先打上關於谷歌從我使用is.maximal功能從arules包發現一個很簡單的解決方案之前研究了一段時間的先驗規則的超集。

因此,對於手頭上的問題,您生成您的規則之後,使用is.maximal子集他們:

rules <- apriori(table2, parameter = list(minlen=1, sup=s)) 
maximal_rules <- rules[is.maximal(rules)] 

然後你就可以抓住剛剛獨特的項目集,如果你想:

itemsets <- unique(generatingItemsets(maximal_rules)) 

下面是使用文森特的答案示例數據重複的例子:

library(arules) 
example(apriori) 
inspect(rules) 
maximal_rules<-rules[is.maximal(rules)] 
inspect(maximal_rules) 
itemsets <- unique(generatingItemsets(maximal_rules)) 
inspect(itemsets)