28

我从 csv 文件中读取数据,数据有 3 列,一列是交易 ID,另外两列是产品和产品类别。我需要将其转换为事务才能使用arulesapriori中的功能。当我转换为交易时它显示错误:

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 列。需要在多个列之间找到规则。

4

3 回答 3

22

我在这个网站上找到了一些对我有用的信息。让我复制相关段落:

数据框可以是规范化(单一)形式或平面文件(篮子)形式。
当文件是篮子形式时,这意味着每条记录代表一个交易,其中篮子中的项目由列表示。
当数据集为单一形式时,这意味着每条记录代表一个项目,每个项目都包含一个事务 id

要从文件加载事务,请使用read.transactions. 在你和我的案例中,文件都是单一的形式。
我使用以下代码将 .csv 文件加载为transactions

trans = read.transactions("some_data.csv", format = "single", sep = ",", cols = c("transactionID", "productID"))

要完全理解上述命令,请查看read.transactions手册,?read.transactions在 R 控制台中键入后可用。

于 2014-03-31T12:38:44.540 回答
4

我试图做同样的事情,在我考虑了我正在使用的 data.frame 中的所有列之后,我仍然无法将它强制转换为事务的 itemMatrix。然后我意识到我从来没有为我正在工作的会话重新加载“arules”包。非常愚蠢的错误,但只是想提一下,以防其他人遇到同样的问题,先尝试简单的东西:

library("arules")
于 2015-02-17T14:15:03.757 回答
0

您需要先将“Transaction_id”转换为因子变量。

于 2013-08-26T20:05:10.280 回答