- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
假设我有 15 个商店,每个商店有 4 种产品和自定义价格: 每个商店不会拥有全部 4 种产品,但只能有 2 种、3 种、4 种甚至 1 种。 价格相似,但根据每个商店定制。所有商店的价格每 2-3
我这辈子似乎无法获得我想要的结构并使其正常运行,所以我一怒之下来找你们。 设置:我有一个名为 Futures_Contracts 的目录,里面有大约 30 个文件夹,全部以标的 Assets 命名,最
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题吗? 更新问题,以便 editing this post 提供事实和引用来回答它. 关闭 9 年前。 Improve
所以我已经使用 Smalltalk 大约 6 个月了(Squeak 和 Pharo),主要是做数据分析,我即将开始我的第一个 Seaside 应用程序。所以我对所有 Smalltalkers 的问题是
我选择的选项对象如下所示: { 3 : 'c', 5 : 'a', 6 : 'b', ... } 我的重复看起来像这样: {{v}} 我想按值 (v) 排序,但据我所知
什么是最好的方法(使用的算法/数据结构)来获得在购物网站上订购的前 k 项商品,相关信息在其 n 个服务器中的每一个的日志中? 我正在考虑一种方法,该方法涉及维护一个固定大小的双向链表 k 每个节点都
我正在尝试编写一个模式来验证以下 XML: AK47 The USSR's chief export back in the day, and the guer
我们正在尝试将 Android Market 集成到我们的服务中,我们需要验证用户确实是特定应用程序的所有者,我们需要自动检索该特定应用程序的销售情况。 因此,我们一直在评估 Google Check
我们有一个代表客户购物记录的数组。例如,它是这样一个数组: custA, item1, custB, item1, custA, item2, custB, item3, custC, item1,
我是一名优秀的程序员,十分优秀!