如何通过 arules R 中的 lhs itemMatrix 对象对规则进行子集化?

Posted

技术标签:

【中文标题】如何通过 arules R 中的 lhs itemMatrix 对象对规则进行子集化?【英文标题】:How to subset rules by a lhs itemMatrix object in arules R? 【发布时间】:2018-02-26 03:44:31 【问题描述】:

我生成了专注于 rhs 端的三个不同值的规则,如下所示(在本例中,三个不同的值用于 fallotrayec):

rules <- apriori(df, parameter=list(minlen=3,maxlen=6,supp=0.015,conf=0.6,maxtime=120),
                appearance = list(rhs=c("fallotrayec_f1", "fallotrayec_f2", "fallotrayec_f3")))

现在我可以从中提取 3 个规则子集,每个值只包含较高的支持值:

rules_f1 <- subset(rules, (rhs %in% "fallotrayec_f1") & support > 0.4 )
rules_f2 <- subset(rules, subset = (rhs %in% "fallotrayec_f2") & support > 0.18  )
rules_f3 <- subset(rules, subset = (rhs %in% "fallotrayec_f3") & support > 0.015  )

之后,我从这 3 个子集中分别得到 lhs 方面:

lhs_f1 <- lhs(rules_f1)
lhs_f2 <- lhs(rules_f2)
lhs_f3 <- lhs(rules_f3)

最后,我想从 rules_f1 中删除所有 lhs 等于 rules_f2rules_f3 上的规则,然后我尝试:

rules_f1_new <- subset(rules_f1, !(lhs %in% lhs_f2) | !(lhs %in% lhs_f3) )

但它一直返回以下错误:

Error in validObject(x, complete = TRUE) : 
invalid class “itemMatrix” object: item labels not unique

我正在使用 Rstudio v. 1.1.423 和 R v. 3.4.3。不幸的是,我使用的数据受到保护,但我认为可以使用其中一个演示数据集来模拟上述代码。我还使用 rm.duplicates=TRUE 加载了我的数据集。提前致谢。

【问题讨论】:

【参考方案1】:

看起来您在代码中发现了一个错误。执行以下替换错误代码并检查输出是否符合预期。

setMethod("%in%", signature(x = "itemMatrix", table = "itemMatrix"),
  function(x, table) !is.na(match(x, table))
)

这将在arules 的下一版本中修复。谢谢你的例子。这对发现问题很有帮助。

【讨论】:

非常感谢 Michaell,重新定义这个方法解决了我的问题!

以上是关于如何通过 arules R 中的 lhs itemMatrix 对象对规则进行子集化?的主要内容,如果未能解决你的问题,请参考以下文章

R中的包Arules:在交易中附加列

R_Studio(关联)对dvdtrans.csv数据进行关联规则分析

R arules / apriori - 如何实际实现

使用 R 中的 Apriori 算法预测多个输出

R(arules)将数据帧转换为事务并删除NA

不能使用R语言的arules的数据集怎么办