如何以编程方式枚举R中apriori的RHS中的所有唯一值

时间:2014-03-29 14:27:53

标签: r subset apriori

apriori返回规则列表,您可以将其分组以找出特定规则。

但是,子集要求您已知道项目名称。例如,subset(rules, subset=rhs%pin%"soap")。你知道你正在寻找肥皂'。但在一个案例中,我不知道手头的名字,并希望以编程方式找出。

以编程方式查找生成规则的rhs上列出的所有唯一项目的过程是什么?

unique(rhs)这样的东西会给我一个向量中rhs上所有项目的列表,这样我就可以对它们进行枚举并对它们使用subset

修改: 以下是rules <- apriori(Adult, parameter = list(supp = 0.5, conf = 0.9, target = "rules"))生成的规则的图表。它显示RHS只包含4个项目。如何以编程方式从生成的规则中获取这4个项目(并且只有那4个项目)? R Plot generated by Gopalakrishna

4 个答案:

答案 0 :(得分:0)

这样的东西?

library(arules)

data("Adult")
rules <- apriori(Adult, 
                 parameter = list(supp = 0.5, conf = 0.9,
                                  target = "rules"))

rhs.unique <- unique(rules@rhs@itemInfo$labels[rules@rhs@data@i])
print(rhs.unique)
[1] "sex=Male"                       "capital-gain=High"             
[3] "native-country=Trinadad&Tobago" "race=Other"     

答案 1 :(得分:0)

@hrbrmstr答案的一小部分延伸。这是你的想法吗?

library(arules)
data("Adult")
rules <- apriori(Adult, 
                 parameter = list(supp = 0.5, conf = 0.9,
                                  target = "rules"))
result <- data.frame(do.call(rbind,strsplit(rules@rhs@itemInfo$labels,"=")))
colnames(result) <- c("LHS","RHS")
head(result,10)
#          LHS              RHS
# 1        age            Young
# 2        age      Middle-aged
# 3        age           Senior
# 4        age              Old
# 5  workclass      Federal-gov
# 6  workclass        Local-gov
# 7  workclass     Never-worked
# 8  workclass          Private
# 9  workclass     Self-emp-inc
# 10 workclass Self-emp-not-inc

然后你可以做

RHS <- unique(result$RHS)

我想,但并非所有RHS都与所有LHS一起使用。

答案 2 :(得分:0)

提取一组唯一规则的更简洁方法是使用inspect()包中的arules函数。结果是一个数据框,每行代表一个唯一的规则。

library(arules)

data("Adult")
rules <- apriori(Adult, 
                 parameter = list(supp = 0.5, conf = 0.9,
                                  target = "rules"))

result = inspect(unique(rules@rhs))

答案 3 :(得分:0)

您可以使用存储在RHS数据项中的RHS标签索引来获取通过对RHS项标签进行子集生成的唯一RHS元素的字符向量。如果rules是一组先验规则,则以下行有效:

unique(rules@rhs@itemInfo$labels[rules@rhs@data@i+1])

请注意,rules@rules@rhs@data@i是标签索引,其范围可以比可能的标签数量小0到1。因此,我们需要在使用这些索引时添加1,因为rules@rhs@itemInfo$labels没有第0个元素。