在R中通过lhs对arules进行子集处理

3

我希望以以下方式对在R中运行apiriori算法产生的规则进行子集处理。

规则子集必须具有LHS,该LHS必须仅包含另一个列表(称为items)中的任何项目。对RHS没有任何限制。

我尝试了以下代码,但未能获得预期结果:

> library(arules)
> library(datasets)
> data(Groceries)
> rules <- apriori(Groceries, parameter = list(supp = 0.001, conf = 0.8))
inspect(head(rules))
    lhs                                 rhs            support     confidence lift     
[1] {liquor,red/blush wine}          => {bottled beer} 0.001931876 0.9047619  11.235269
[2] {curd,cereals}                   => {whole milk}   0.001016777 0.9090909   3.557863
[3] {yogurt,cereals}                 => {whole milk}   0.001728521 0.8095238   3.168192
[4] {butter,jam}                     => {whole milk}   0.001016777 0.8333333   3.261374
[5] {soups,bottled beer}             => {whole milk}   0.001118454 0.9166667   3.587512
[6] {napkins,house keeping products} => {whole milk}   0.001321810 0.8125000   3.179840

items = c("curd","cereals")
rules.subset2 <- subset(rules, subset = all(lhs %in% items))

这个子集操作的结果如下(这是错误的,因为我只想在规则子集中将“酸奶和谷物”作为左手边)。
inspect(head(rules.subset2))
          lhs                                                                           rhs                support     confidence lift     
    [1]   {liquor,red/blush wine}                                                    => {bottled beer}     0.001931876 0.9047619  11.235269
    [2]   {curd,cereals}                                                             => {whole milk}       0.001016777 0.9090909   3.557863
    [3]   {yogurt,cereals}                                                           => {whole milk}       0.001728521 0.8095238   3.168192
    [4]   {butter,jam}                                                               => {whole milk}       0.001016777 0.8333333   3.261374
    [5]   {soups,bottled beer}                                                       => {whole milk}       0.001118454 0.9166667   3.587512
    [6]   {napkins,house keeping products}                                           => {whole milk}       0.001321810 0.8125000   3.179840

我尝试在这个网站上寻找答案,但没有成功。我还尝试了其他各种方法,但都没有成功。

如果您能帮忙,我将不胜感激。


你找到答案了吗?我认为这些答案都不适用。 - cloudscomputes
3个回答

2

当我尝试这样做时,它有效:

rules.subset2 <- subset(rules, lhs %in% c("cereals", "curd"))

多步骤将"cereals"和"curd"同时包含在lhs中:

sub_2<- subset(rules, lhs %in% "cereals")
sub_3<- subset(sub_2, lhs %in% "curd")


请注意,上述内容是关于it技术的。

感谢@jiayao。这个命令会列出所有左侧至少有一个条目的规则。以下是您建议的语句的输出:hs rhs support confidence [1] {curd,cereals} => {whole milk} 0.001016777 0.9090909 [2] {yogurt,cereals} => {whole milk} 0.001728521 0.8095238 [3] {turkey,curd} => {other vegetables} 0.001220132 0.8000000。但我需要R命令来获取只包含"items"向量中的项目而不包含任何其他项目的规则。 - sri
哦,好的,所以你只想在lhs中同时有“cereals”和“curd”。我在rstudio中试了一下,但没找到一行代码实现的方法,但我认为你可以分多步骤来完成。sub_2<- subset(rules, lhs %in% "cereals")``sub_3<- subset(sub_2, lhs %in% "curd")我会继续搜索。 - Jiayao Jiang

2
我认为操作符是%ain%,因此类似以下方式:

if (a %ain% b) {

lhs %oin% c('cereals', 'curd')

0

文档中给出了一个示例

## select only rules with items "age=Young" and "workclass=Private" in
## the left-hand-side
rules.sub <- subset(rules, subset = lhs %ain% 
    c("age=Young", "workclass=Private"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接