0

我正在尝试在 R 中进行先验分析,但是由于我将在不同的环境中运行它,因此我必须在没有“read.transactions”功能的情况下执行此操作(因为这需要从文件中获取数据,而我不能这样做在这个例子中)。换句话说 - 我必须使用我已经拥有的列,而不涉及任何文件。所以,这是我写的一个例子来告诉你我的问题:

test <- data.frame(c(1, 2, 3, 4, 5), c("1, 2, 3", "2, 4", "1, 5, 2", "4, 1", "2, 3, 4, 5"))
colnames(test) <- c("TransactionID", "items")
test$TransactionID <- as.factor(test$TransactionID)
rules <- as(split(as.vector(test[,2]),as.vector(test[,1])), "transactions")
tkoszyk <- apriori(rules, parameter=list(minlen=2, sup=0.1, conf=0.1, target="rules"))
inspect(tkoszyk)

所以这里的问题是这个函数以错误的方式读取我的项目向量。这是一个输出:

    lhs    rhs          support confidence lift count
[1] {}  => {1, 2, 3}    0.2     0.2        1    1    
[2] {}  => {2, 4}       0.2     0.2        1    1    
[3] {}  => {1, 5, 2}    0.2     0.2        1    1    
[4] {}  => {4, 1}       0.2     0.2        1    1    
[5] {}  => {2, 3, 4, 5} 0.2     0.2        1    1    

所以基本上它所做的是而不是像这样制作项目列表:

"1" "2" "3" "4" "5"

它使 itemlist 像这样:

"1, 2, 3"    "1, 5, 2"    "2, 3, 4, 5" "2, 4"       "4, 1"  

在我对这个主题的调查中,我了解到这里的一个问题是引号。只是为了尝试,我在 R 中使用“read.transactions”制作了这个例子,当我将“quote”参数标记为 FALSE 时,它开始正常工作。但是再来一次,因为我不能使用 read.transactions。我不知道如何处理这个问题。
当然这个数据只是一个例子,所以在我的真实数据中,我不能那么容易地改变它,我必须使用一些 R 代码来完成,而不是使用文件。
我认为我最好的想法是尝试

capture.output(cat(test$items))

但我仍然无法让它工作。
将不胜感激任何帮助,我已经很绝望了。

4

1 回答 1

0

您的拆分不起作用。您应该执行以下操作:

itemList <- strsplit(as.character(test$items), split = ", ")
trans <- as(itemList, "transactions")
inspect(trans)

    items    
[1] {1,2,3}  
[2] {2,4}    
[3] {1,2,5}  
[4] {1,4}    
[5] {2,3,4,5}
于 2018-05-08T13:57:42.737 回答