R arules - 创建交易的快捷方式

时间:2017-10-04 14:15:57

标签: r transactions arules

我有一个包含约100万个事务行的数据集,我试图从data.frame转换为事务类,以便在apriori包的arules函数中使用。我使用文档中讨论的表单:

a_df3 <- data.frame(
TID = c(1,1,2,2,2,3),
item=c("a","b","a","b","c", "b")
)
a_df3
trans4 <- as(split(a_df3[,"item"], a_df3[,"TID"]), "transactions")

但是,对于大块数据,这非常慢。有什么方法可以加快速度吗?

1 个答案:

答案 0 :(得分:0)

将列表(split的结果)转换为包ngCMatrix中的稀疏Matrix是非常昂贵的。主要是因为我们不能确定提供的交易中没有重复的项目,并且交易中的项目已经排序......

以下是一些实验代码,可直接将您的第一个data.frame转换为事务

library("arules")
library("Matrix")

a_df <- data.frame(
  TID = c(1,1,2,2,2,3),
  item=c("a","b","a","b","c", "b")
)

j <- as.integer(a_df$TID)
item <- factor(a_df$item)
i <- as.integer(item)

ngT <- new("ngTMatrix", i = i-1L, j = j-1L, Dim = c(max(i), max(j)), 
  Dimnames = list(levels(item), NULL))
ngC <- as(ngT, "ngCMatrix")
trans <- as(ngC, "transactions")

inspect(trans)

     items   itemsetID
[1] {a,b}   1        
[2] {a,b,c} 2        
[3] {b}     3  

一百万次交易需要几秒钟而不是一分钟。小心使用代码(它不会检查输入数据),直到它进入arules包。