尝试在R中使用arulesSequences
个包。遇到问题我见过很多人遇到但没有好的答案:从数据框架或矩阵到事务数据类型。
我已经完成了这个,正如文档明确指出的那样,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
我到处都试图通过这个简单的障碍:
所有错误都是上面描述的错误,或者当我没有得到任何错误时,我得到一个包含两列的事务对象,arulesSequences
无法读取OF COURSE,因为它需要三列:1)SEQUENCE- ID,EVENT-ID,ITEMS。
我认为我的数据库结构不会更清晰。顺序是“客户编号”,事件ID将是购买编号和项目,以及项目。
请任何帮助,包括结构“as()”想要看到它正确地进行强制。
答案 0 :(得分:2)
试试这个:
trans4 <- as(a_df3[,"item"], "transactions")
trans4@itemsetInfo$sequnceID = a_df3$SEQUENCEID
trans4@itemsetInfo$eventID = a_df3$EVENTID
transSeq = as(trans4, "timedsequences")
答案 1 :(得分:0)
arules将事务视为集而不是序列。
它可以检测频繁项集,但可能不是序列。
检查重复项是防止错误使用它的一种保护措施:它会忽略多重性和顺序,因此有多个相同类型的项目 会丢失信息。
transactions类表示用于挖掘项集或规则的事务数据。它是class itemMatrix的直接扩展,用于存储二进制关联矩阵,项标签以及可选的事务ID和用户ID。
(来自文档,重点补充)
答案 2 :(得分:0)
这个问题被问到了一段时间了,但无论如何我都会试着回答它。该错误似乎是因为存在以下类型的相同记录
SEQUENCEID EVENTID ITEM
1 1 1 a
3 1 1 a
4 2 1 c
如果在拆分和转换为事务之前检查不同的记录,这可能会解决问题。