我从csv文件中读取数据,数据有3列,一列是事务ID,另外两列是产品和产品类别。我需要将其转换为交易才能使用 arules 中的apriori
函数。转换为事务时显示错误:
dat <- read.csv("spss.csv",head=TRUE,sep="," , as.is = T)
dat[,2] <- factor(dat[,2])
dat[,3] <- factor(dat[,3])
spssdat <- dat[,c(1,2,3)]
str(spssdat)
'data.frame': 108919 obs. of 3 variables:
$ Transaction_id: int 3000312 3000312 3001972 3003361 3003361 3003361 3003361 3003361 3003361 3004637 ...
$ product_catalog : Factor w/ 9 levels "AIM","BA","IM",..: 1 1 5 7 7 7 7 7 7 1 ...
$ product : Factor w/ 332 levels "ACM","ACTG/AIM",..: 7 7 159 61 61 61 61 61 61 7 ...
trans4 <- as(spssdat, "transactions")
Error in as(spssdat, "transactions") :
no method or default for coercing “data.frame” to “transactions”
如果数据只有两列,则可以按以下方式工作:
trans4 <- as(split(spssdat[,2], spssdat[,1]), "transactions")
但是当我有3列时,我不知道如何转换。通常还有其他列,如类别属性,客户属性。所以列通常大于2列。需要在多列之间找到规则。
答案 0 :(得分:20)
我在this website找到了一些对我有用的信息。让我复制相关段落:
数据框可以是标准化(单)形式,也可以是平面文件(购物篮)形式。
当文件为购物篮形式时,表示每条记录代表一个交易,其中购物篮中的商品由列表示。
当数据集为单形式时,表示每条记录代表一个项目,每个项目包含一个交易ID 。
要从文件加载交易,请使用read.transactions
。在您和我的案例中,文件都是单一形式
我已使用以下代码将.csv文件加载为transactions
:
trans = read.transactions("some_data.csv", format = "single", sep = ",", cols = c("transactionID", "productID"))
要完全理解上述命令,请在R控制台中键入read.transactions
后查看?read.transactions
手册。
答案 1 :(得分:4)
我试图做同样的事情,在我将数据框中的所有列考虑在内之后,我仍然无法将其强制转换为交易的itemMatrix。然后我意识到我从来没有重新加载&#34; arules&#34;我正在工作的会议的包。非常愚蠢的错误,但只是想提及它以防其他人遇到同样的问题,先尝试简单的东西:
library("arules")
答案 2 :(得分:0)
您需要先将“Transaction_id”转换为因子变量。