【问题标题】:preparation data set for basket analysis in RR中篮子分析的准备数据集
【发布时间】:2017-04-28 09:25:01
【问题描述】:

我目前正在处理一个食堂数据集,并想分析这些篮子。但是,我有以下问题:

这是我的数据摘录:

basket_id   item_name         item_id
2345        coke 0.5          98
2345        salad 300g        103
7876        water             88
7876        diet coke         95
7876        CANCEL diet coke  95
7876        sushi             143
3498        coffee            23

为了能够实际分析消费者的购买行为,我需要从数据集中删除所有取消订单。不幸的是,我不能只删除包含“CANCEL”的项目,因为这会扭曲我的结果,因为我需要删除被取消的项目以及被取消的项目。例如篮子号。 7876包含水、健怡可乐、CANCEL健怡可乐和寿司。但最终消费者只买了水和寿司。我需要的是一个函数,它可以识别取消和被取消的项目并将其删除,以便我得到一个如下所示的数据集:

basket_id   item_name   item_id
2345    coke 0.5        98
2345    salad 300g      103
7876    water           88
7876    sushi           143
3498    coffee          23

因此实际的购物篮 7876 仅包含消费者最终购买的商品。感谢您的任何帮助或建议!

【问题讨论】:

    标签: r analysis market-basket-analysis


    【解决方案1】:

    让我们将您的数据集称为data。那么

    library(data.table)
    
    data <- data.table(
    basket_id=c(2345, 
                2345, 
                7876, 
                7876, 
                7876, 
                7876, 
                3498 ),   item_name=c("coke 0.5"        ,
                                      "salad 300g"      ,
                                      "water"           ,
                                      "diet coke"       ,
                                      "CANCEL diet coke",
                                      "sushi"           ,
                                      "coffee"              ),         item_id=c(98,
                                                                                 103,
                                                                                 88,
                                                                                 95,
                                                                                 95,
                                                                                 143,
                                                                                 23)
    
    
    
    
    
    
    
    )
    
    dt <- as.data.table(data)
    temp.basket <- dt[item_name%like%"^CANCEL",.(basket_id)]
    temp.item <- dt[item_name%like%"^CANCEL",.(item_id)]
    dt2 <- dt[!(basket_id%in%temp.basket &item_id%in%temp.item)]
    

    符号^ 确保item_name 开头的单词CANCEL

    【讨论】:

    • 使用grepl("CANCEL", dt$item_name),您将获得一个逻辑向量,指示您拥有CANCEL 字词的行。问题是删除作为已取消行开头的那些。这个问题我觉得你的提案里还是有的。
    • @R18 ! (not) 指标应该处理它,我认为
    • 我的意思是我认为他想删除初始矩阵中的第四行,我认为它只删除了item_name列中CANCEL的行。跨度>
    • 哇,感谢您的快速回复!不幸的是,它不是 100% 工作的。它为 temp.basket 和 temp.item 选择正确的篮子和项目,但是,当我为 dt2 运行最后一行时,dt 和 dt2 之间没有区别...
    • 如果我在一个篮子里多了一次相同的物品,但只有一个被取消了,这还能用吗?!假设篮子 7876 将包含水、寿司、健怡可乐、健怡可乐和 CANCEL 健怡可乐,我需要的结果是水、寿司、健怡可乐......?!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多