【发布时间】:2016-10-10 18:25:41
【问题描述】:
我有边缘形式的交易数据,我需要创建一个可与 arules R 包一起使用的基于交易的稀疏矩阵。目前我正在使用 tidyr 包中的“spread”将边缘列表转换为矩阵,每行作为“篮子 ID”。然后我将其转换为逻辑后,因为我不能将数量信息与 arules 一起使用,我将其转换为“基于事务”的数据类型。请参阅下面的 R 代码示例。
我的问题是这适用于小套篮/交易,但是当我有更多时,由于“传播”功能会导致内存问题。我想知道是否有更有效的内存/资源方式将原始边缘视图转换为 arules 使用的事务数据类型?提前感谢您的任何建议!
## Load libraries
library(tidyr)
library(arules)
## Create an example of the transactions that I am analizing
TransEdgeList = data.frame(BasketID=c(1,1,2,2,3,3,3),
Item=c(10,11,10,12,10,11,13),
Qty=c(1,1,2,3,1,2,1))
#convert to something that arules can transform
BasketDataFrame = spread(TransEdgeList, Item, Qty)
#convert to logical
BasketDataFrame[, 2:dim(BasketDataFrame)[2]]=
!is.na(BasketDataFrame[, 2:dim(BasketDataFrame)[2]])
#convert to a transaction sparse matrix that arules can use
BasketMatrix = as(BasketDataFrame[, 2:dim(BasketDataFrame)[2]], "transactions")
BasketMatrix
【问题讨论】:
-
table更好吗?table(TransEdgeList[1:2])或xtabs(~ BasketID + Item, data=TransEdgeList, sparse=TRUE)
标签: r transactions arules