gpt4 book ai didi

r - 如何查找商品及其组合的购买次数?

转载 作者:行者123 更新时间:2023-12-01 11:13:30 26 4
gpt4 key购买 nike

我有一个 data.table 显示客户购买了哪些商品。每行代表一位客户,每一列代表一项。该表对每个客户都有相同数量的列,item* 列中的值是 1 或 0,具体取决于客户是否购买了给定的项目。表格的简单版本如下所示:

data.table(customerID = c(1,2,3,4,5),
item1 = c(1,0,0,1,1),
item2 = c(1,0,1,1,1),
item3 = c(1,0,0,0,1),
item4 = c(0,1,1,1,1))

该表显示客户 1 购买了商品 1、2、3,而商品 3 由客户 1 和 5 购买。

在实际情况下,data.table 有很多列,在代码中按名称引用它们是不切实际的,但使用长格式的数据就可以了。

我需要找出单个项目被购买了多少次以及它们的组合被购买了多少次。在这种情况下,我想得到类似的东西:

item1 3
item2 4
item3 2
item4 4
item1;item2 3
item1;item3 2
item1;item4 1
...
(same for other combinations of length 2)
...
item1;item2;item3 2
item1;item2;item4 1

...
up to combinations of 4 items.

此外,我需要为每位客户提供一张表格,表明他或她购买了哪些产品组合。

编辑:

感谢三个非常有用的答案,我知道如何回答问题的第一部分 - 即计算有多少客户购买了某种组合。然而,第二部分仍然没有答案。我想知道哪些客户购买了哪种组合。

最佳答案

使用 baseR 和 data.table 的逐步方法

样本数据

DT <- data.table(customerID = c(1,2,3,4,5),
item1 = c(1,0,0,1,1),
item2 = c(1,0,1,1,1),
item3 = c(1,0,0,0,1),
item4 = c(0,1,1,1,1))

代码

#identify columns with items, grab their names
cols <- names(DT[,-1])

在下面的代码中:如果您想要最多 n 个产品的组合,请将 1:length(cols) 设置为 1:n

#put all combinations of items in a list
combos <- unlist( lapply( 1:length(cols), combn, x = cols, simplify = FALSE ), recursive = FALSE )

#calculate number of sold items per combo
l <- lapply( combos, function(x) {
nrow( DT[ rowSums( DT[, x, with = FALSE ] ) == length( x ), ] )
})

#name the list based on the combo
names(l) <- lapply( combos, paste0, collapse = ";")

输出

str( l )
List of 15
$ item1 : int 3
$ item2 : int 4
$ item3 : int 2
$ item4 : int 4
$ item1;item2 : int 3
$ item1;item3 : int 2
$ item1;item4 : int 2
$ item2;item3 : int 2
$ item2;item4 : int 3
$ item3;item4 : int 1
$ item1;item2;item3 : int 2
$ item1;item2;item4 : int 2
$ item1;item3;item4 : int 1
$ item2;item3;item4 : int 1
$ item1;item2;item3;item4: int 1

或者创建一个data.table

as.data.table( as.matrix( unlist(l), ncol = 2, nrow = length(l) ), keep.rownames = TRUE )
#                         rn V1
# 1: item1 3
# 2: item2 4
# 3: item3 2
# 4: item4 4
# 5: item1;item2 3
# 6: item1;item3 2
# 7: item1;item4 2
# 8: item2;item3 2
# 9: item2;item4 3
#10: item3;item4 1
#11: item1;item2;item3 2
#12: item1;item2;item4 2
#13: item1;item3;item4 1
#14: item2;item3;item4 1
#15: item1;item2;item3;item4 1

关于r - 如何查找商品及其组合的购买次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56580676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com