You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中转换数据集以适配购物篮分析的二元格式?

在R中将交易数据转换为购物篮分析格式

这里提供两种实用的方法来完成转换,分别适配通用数据处理场景和专业购物篮分析场景:

方法一:使用tidyverse工具包(通用数据处理)

适合习惯用dplyr/tidyr做数据转换的场景,步骤直观易上手:

  1. 加载所需工具包:
library(dplyr)
library(tidyr)
library(stringr) # 可选,用于清洗产品描述
  1. 预处理数据(推荐执行):
    • 移除缺失值
    • 统一产品描述格式(大小写、空格)
    • 去重同一交易内的重复产品(购物篮只关心是否存在,不关心购买次数)
# 假设原始数据框名为df
df_clean <- df %>%
  filter(!is.na(InvoiceNo), !is.na(Description)) %>%
  mutate(Description = str_to_lower(str_trim(Description))) %>%
  distinct(InvoiceNo, Description)
  1. 转换为宽格式二元矩阵:
basket_df <- df_clean %>%
  pivot_wider(
    names_from = Description, # 产品名称作为列名
    values_from = Description, # 基于产品列生成标记值
    values_fn = ~1, # 产品存在则标记为1
    values_fill = 0 # 产品不存在则填充0
  )

转换完成后,每行对应一个InvoiceNo,每列对应一个产品,单元格的1/0分别代表该交易是否包含对应产品。

方法二:使用arules包(专业购物篮分析)

arules是专门用于关联规则挖掘的工具包,其transactions对象是购物篮分析的标准格式,后续可直接用于Apriori等算法:

  1. 加载包并完成数据转换:
library(arules)

# 先执行和方法一一致的预处理步骤
df_clean <- df %>%
  filter(!is.na(InvoiceNo), !is.na(Description)) %>%
  mutate(Description = str_to_lower(str_trim(Description))) %>%
  distinct(InvoiceNo, Description)

# 转换为transactions专用对象
transactions <- as(df_clean, "transactions")

# 若需要转换为普通二元矩阵格式:
basket_matrix <- as(transactions, "matrix")

transactions对象自带购物篮分析的专属属性,执行summary(transactions)即可查看交易数量、产品数量等核心信息。

关键注意点

  • 确保InvoiceNo为字符或因子类型,避免被R误判为数值(比如带字母的交易编号)
  • 同一交易内的重复产品必须去重,否则会导致标记逻辑错误
  • 产品描述的一致性很关键,比如"Apple"和"apple"会被识别为两个不同产品,预处理时统一格式是必要的

内容的提问来源于stack exchange,提问作者Aldo Verdino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:35:11