Котировки в анализе потребительской корзины в R

Я пытаюсь выполнить априорный анализ в 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"

он делает список элементов следующим образом:

"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))

Но все же я не могу заставить его работать.
Буду признателен за любую помощь, я уже довольно безнадежен.


person Cezary    schedule 07.05.2018    source источник
comment
Итак, я обнаружил, что дело здесь, вероятно, в «одиночном» или «корзинном» формате файла. Но тем не менее, использование функции as не позволяет мне изменить формат с одиночного на корзину   -  person Cezary    schedule 07.05.2018


Ответы (1)


Ваше разделение не работает. Вы должны сделать что-то вроде:

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}
person Michael Hahsler    schedule 08.05.2018