在R中生成产品组合ID列及可视化共同购买数据的方法
R数据框处理与可视化方案
一、添加ID列
要生成每行对应的产品组合ID,用apply函数遍历每行数据,筛选出值为1的产品列名,再用paste拼接即可:
# 加载tibble包(如果还没加载) library(tibble) # 新增ID列 df$ID <- apply(df[, 1:9], 1, function(row) { # 取出当前行值为1的列名,用"-"拼接 paste(names(row)[row == 1], collapse = "-") })
运行后,第一行的ID就会变成pro2-pro4,完全符合需求。
二、可视化方案推荐
1. 横向条形图(最直观)
用ggplot2做横向条形图,把购买次数作为横轴,产品组合作为纵轴,同时按次数降序排列,让高频组合优先展示:
library(ggplot2) # 先按购买次数降序排序数据框 df_sorted <- df[order(-df$count), ] ggplot(df_sorted, aes(x = count, y = reorder(ID, count))) + geom_bar(stat = "identity", fill = "#2E86AB") + labs(title = "产品组合购买次数分布", x = "购买次数", y = "产品组合") + theme_minimal() + theme(axis.text.y = element_text(size = 8)) # 调整纵轴标签字号,避免长组合名重叠
这个图能直接对比每个组合的热度,一眼就能看到哪些组合最受欢迎。
2. Top N组合条形图(避免拥挤)
如果组合数量太多,全展示会显得杂乱,可以只保留Top N的高频组合,剩下的合并为“其他”:
# 设定要展示的Top数量 top_n <- 10 # 提取Top10组合 df_top <- head(df_sorted, top_n) # 计算剩余组合的总次数,合并为"其他" df_other <- tibble( ID = "其他", count = sum(tail(df_sorted$count, nrow(df_sorted) - top_n)) ) # 合并数据 df_combined <- rbind(df_top, df_other) ggplot(df_combined, aes(x = count, y = reorder(ID, count))) + geom_bar(stat = "identity", fill = c(rep("#2E86AB", top_n), "#F2C14E")) + labs(title = "Top10产品组合购买次数", x = "购买次数", y = "产品组合") + theme_minimal()
这样图表更简洁,重点突出最热门的组合,同时也能看到剩余组合的总占比。
内容的提问来源于stack exchange,提问作者Jianyang Tai
相关产品推荐
相关产品推荐

