2013-07-09 31 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)