试图在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列的dataframe做同样的事情,那么一切都会变得混乱:
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不能读取它,因为它需要三列:( 1)序列-ID、事件-ID、项。
我认为我的数据库结构再清楚不过了。顺序是“顾客号”,事件id是购买号码和物品,嗯,项目。
请提供任何帮助,包括结构"as()“希望看到,以便它正确地执行胁迫。
发布于 2017-06-20 22:13:50
试试这个:
trans4 <- as(a_df3[,"item"], "transactions")
trans4@itemsetInfo$sequnceID = a_df3$SEQUENCEID
trans4@itemsetInfo$eventID = a_df3$EVENTID
transSeq = as(trans4, "timedsequences")发布于 2015-02-24 08:44:03
arules将事务处理为集,而不是序列。
它可以检测频繁项集,但可能不能检测序列。
检查副本是一种防止错误使用的安全措施:它忽略了多重性和顺序,因此拥有多个相同类型的项目就会丢失信息。
辅助事务类表示用于挖掘项集或规则的事务数据。存储二进制关联矩阵()、项标签以及可选事务is和用户is是类辅助项矩阵的直接扩展。
(从文件中添加了重点)
发布于 2015-08-27 18:01:48
人们问这个问题已经有一段时间了,但无论如何我都会尽力回答的。此错误似乎是因为有以下类型的相同记录
SEQUENCEID EVENTID ITEM
1 1 1 a
3 1 1 a
4 2 1 c 如果您在拆分和转换到事务之前检查不同的记录,这可能会解决这个问题。
https://stackoverflow.com/questions/28685422
复制相似问题