【问题标题】:Error extracting product items for Market Basket Analysis using regular expressions in R (StringR)使用 R (StringR) 中的正则表达式为购物篮分析提取产品项目时出错
【发布时间】:2021-11-23 13:37:09
【问题描述】:
order_id product_name
1 The Ordinary - High-Adherence Silicone Primer - 30ml, The Ordinary - Natural Moisturizing Factors + HA 30ml
2 Sandal, Brown - 44
3 Acetate - Square - Black - Transition - Sunglasses, Cartier - 8221 - Rim less - Green Double Shade - Sunglasses, Ray Ban - Aviator - Brown Double Shade - 3026 - Diamond Hard - Unbreakable lens, Burberry - 2A357 - Havana - Aviator - Sunglasses, Acetate - Square - Black - Transition - Sunglasses, Cartier - 8221 - Rim less - Green Double Shade - Sunglasses, Ray Ban - Aviator - Brown Double Shade - 3026 - Diamond Hard - Unbreakable lens, Burberry - 2A357 - Havana - Aviator - Sunglasses
4 NasGas Instant Geyser DG6L, NasGas Instant Geyser DG6L, NasGas Instant Geyser DG6L
5 Mpow Flame Solo Bluetooth Earbuds, Punchy Bass IPX7 Waterproof In Ear Wireless Earphones Bluetooth Headphones, USB-CFast ChargingBT5.028H Playtime Built-in Mic for Running Workout, Mpow Flame Solo Bluetooth Earbuds, Punchy Bass IPX7 Waterproof In Ear Wireless Earphones Bluetooth Headphones, USB-CFast ChargingBT5.028H Playtime Built-in Mic for Running Workout

上图是数据集中的一组产品样本。这就是项目在数据库中的存储方式。

考虑订单 ID 3: 第一项是醋酸纤维……第二项是 Cartier……第三项 Burberry……然后,这些物品只重复两次,在某些物品情况下(订单 ID 4)重复三次。我需要删除这个重复。在这种情况下,分隔符是逗号。

其次:

考虑订单 id 4:这里我不能用逗号分隔项目,因为第一个产品项目在 Workout 结束并且在一个产品项目描述中有逗号

我之前使用的是以下代码

data.frame(tran_pay4) %>%
  mutate(product_name = str_extract_all(product_name, "((?!\\s)[^,]+)(?!.*\\1)"))

这适用于大多数购物车,但不适用于 case::order_id = 5 目标是保留单个产品项。

输出应如下所示:

order_id product_name
1 The Ordinary - High-Adherence Silicone Primer - 30ml, The Ordinary - Natural Moisturizing Factors + HA 30ml
2 Sandal, Brown - 44
3 Acetate - Square - Black - Transition - Sunglasses, Cartier - 8221 - Rim less - Green Double Shade - Sunglasses, Ray Ban - Aviator - Brown Double Shade - 3026 - Diamond Hard - Unbreakable lens, Burberry - 2A357 - Havana - Aviator - Sunglasses
4 NasGas Instant Geyser DG6L
5 Mpow Flame Solo Bluetooth Earbuds Punchy Bass IPX7 Waterproof In Ear Wireless Earphones Bluetooth Headphones USB-CFast ChargingBT5.028H Playtime Built-in Mic for Running Workout

请告诉我该怎么做?

【问题讨论】:

  • order_id= 1 是我希望我的项目集出现的方式
  • 四点:请再看一遍你的帖子,改正错别字;例如,“第二项载体”应为“第二项Cartier”。其次,发布可重复的数据。第三,准确说出你的目标是什么(这是缺失的!)。 Foruth,发布预期的输出。
  • 添加了更改 - 请查看。

标签: r dplyr data-cleaning stringr data-wrangling


【解决方案1】:

你不需要正则表达式。您只需使用strsplitunique 即可找到独特的物品。

tran_pay4$newproduct = sapply(strsplit(tran_pay4$product_name, ", "), 
                              function(x) paste(unique(x), collapse = ", "))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多