2015-02-23 37 views
2

试图在R中使用arulesSequences包。遇到问题我见过很多人遇到但没有很好的答案:从数据帧或矩阵到事务数据类型。R的序列事务类R

我已经做到了这一点,如文档中明确规定,对于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") 

工作好。但是,如果我尝试了3列数据框做的一样,一切都进入疯狂:

a_df4<-data.frame(SEQUENCEID=c("1","1","1","2","2","3","3"), 
        EVENTID=c("1","2","3","1","2","1","2"), 
        ITEM=c("a","b","a","c","a","a","b")) 
a_df4 
    SEQUENCEID EVENTID ITEM 
1 1   1  a 
2 1   2  b 
3 1   3  a 
4 2   1  c 
5 2   2  a 
6 3   1  a 
7 3   2  b 

是的,有重复,但是这正是点是不是? (找到频繁的序列集合)。

所以,现在我强迫像这样:

seqt<-as(split(myseq[,"ITEM"],myseq[,"SEQUENCEID"],myseq[,"EVENTID"]),"transactions") 

我也得到:

Error in asMethod(object) : 
    can not coerce list with transactions with duplicated items 

我已经遍布试图让通过这个简单的障碍的地方:

  1. 更改拆分顺序
  2. 将所有内容都更改为因子
  3. 一切直接改变成矩阵
  4. 饲喂数据帧像这样进入arules起作用
  5. 导出入.txt,导入作为read.transactions
  6. 导出入.txt,导入称为“篮”
  7. 尝试“解决方案”:here,​​和here(read_baskets是一个功能?)

所有错误都上述任一或当我没有得到任何我收到了TR的一个具有两列的ansaction对象,由于它需要三列,因此无法通过arulesSequences读取OF课程:1)SEQUENCE-ID,EVENT-ID,ITEMS。

我不认为我的数据库结构可能更清晰。顺序是“顾客号码”,事件ID将是购买号码和项目,以及项目。

请任何帮助赞赏包括结构“as()”想要看到,以便它正确强制强制。

回答

0

arules将交易视为集合而不是序列

它可以检测频繁项目集合但可能不是序列

检查重复项是防止错误使用它的一种安全措施:它忽略多重性和顺序,因此具有多个同类项目丢失的信息。

The transactions class represents transaction data used for mining itemsets or rules. It is a direct extension of class itemMatrix to store a binary incidence matrix, item labels, and optionally transaction IDs and user IDs.

(从文档,加上强调)

0

它已经有一段时间,这个疑问句是问过,但我会尽力反正回答。错误似乎是因为有以下类型

SEQUENCEID EVENTID ITEM 
1 1   1  a 
3 1   1  a 
4 2   1  c 

的相同的记录,如果你分裂,转化为交易之前检查重复的记录,这可能解决问题。

2

试试这个:

trans4 <- as(a_df3[,"item"], "transactions") 
[email protected]$sequnceID = a_df3$SEQUENCEID 
[email protected]$eventID = a_df3$EVENTID 

transSeq = as(trans4, "timedsequences") 
+0

我想你的代码的第二行,并得到这个错误:更换了24行,数据为0 – hamid 2017-11-16 18:12:21