R arules,我的唯一规则来自特定列

时间:2013-08-19 13:17:47

标签: r apriori arules

我想挖掘特定的rhs规则。文档中有一个示例表明这是可能的,但仅适用于特定情况(如下所示)。首先是一个数据集来说明我的问题:

input <- matrix( c( rep(10001,6) , rep(10002,3) , rep(10003,3), 100001,100002,100003,100004,100005,100006,100002,100003,100007,100002,100003,100008,rep('a',6),rep('b',6)), ncol=3)
colnames(input) <- c(letters[1:3])
input <- as.data.frame(input)

现在我可以创建规则:

 r <- apriori(input)

要查看规则:

inspect(r)

我想只挖掘在rhs上有b = ...的规则。对于特定值,可以通过添加:

来完成
appearance = list(rhs = c("b=100001", "b=100002"),default="lhs")

到apriori命令。如果我想找到它们,我还必须调整信心。问题在于b列中的元素数量。我可以在这个例子中手工输入“b = .....”格式的所有元素,但我不能在我自己的数据中。

我试图使用unique()获取b的值然后将其赋予rhs,但它会产生错误,因为我给出的值如下:“100001”“100002”而不是“b = 100001”“b = 100002" 。

是否只能从特定列获取rhs规则?

如果没有,是否有一种从'current?

生成'want'的简单方法
current <- c("100001", "100002", "100003", "100004", "100005", "100006", "100007", "100008")
want    <- c("b=100001", "b=100002", "b=100003", "b=100004", "b=100005", "b=100006", "b=100007", "b=100008")

这个问题有点相关:Creating specific rules with arules in r 但这对我来说也有同样的问题,只有不同的方式。

2 个答案:

答案 0 :(得分:1)

您可以使用subset

r <- apriori(input, parameter = list(support = 0.1, confidence = 0.1))
inspect( subset( r, subset = rhs %pin% "b=" ) )
#   lhs      rhs          support confidence     lift
# 1 {}    => {b=100002} 0.2500000  0.2500000 1.000000
# 2 {}    => {b=100003} 0.2500000  0.2500000 1.000000
# 3 {c=b} => {b=100002} 0.1666667  0.3333333 1.333333
# 4 {c=b} => {b=100003} 0.1666667  0.3333333 1.333333

对于第二个问题,您可以使用paste

paste0( "b=", current )
# [1] "b=100001" "b=100002" "b=100003" "b=100004" "b=100005" "b=100006" "b=100007"
# [8] "b=100008"

答案 1 :(得分:0)

arules documentation现在有一个可以完全满足您需要的示例:

bItems <- grep("^b=", itemLabels(input), value = TRUE)
rules <- apriori(input, parameter = list(support = 0.1, confidence = 0.1),
 appearance = list(rhs = bItems))

我还没有使用您的示例代码进行实际测试(arules文档示例使用transactions对象,而不是data.frame),但是grep-那些列标签应该可以工作