У меня есть текстовый файл, подобный следующему:
transactionID item
T100 l1,l2,l3
T200 l2,l4
T300 l2,l3
T400 l1,l2,l3
T500 l1,l3
T600 l2,l3
T700 l1,l3
T800 l1,l2,l3,l5
T900 l1,l2,l3
И я хотел бы прочитать его как файл транзакции для правил. Я использовал следующее:
transacciones <- read.transactions(file = "/home/norhther/Escritorio/trans.txt",
format = "single",
sep = ",",
header = TRUE,
cols = c("transactionID", "item"),
rm.duplicates = TRUE)
Однако я получаю следующую ошибку:
Error in read.transactions(file = "/home/norhther/Escritorio/trans.txt", :
'cols' does not match entries in header of file.
Редактировать
Вы должны изменить свой формат на basket
и использовать разделитель sep = " "
с cols = 1
следующим образом:
text = 'transactionID item
T100 l1,l2,l3
T200 l2,l4
T300 l2,l3
T400 l1,l2,l3
T500 l1,l3
T600 l2,l3
T700 l1,l3
T800 l1,l2,l3,l5
T900 l1,l2,l3'
write(text, file = "trans.txt")
library(arules)
transacciones <- read.transactions(file = "~/Downloads/trans.txt",
format = "basket",
sep = " ",
skip = 1,
cols = c(1),
rm.duplicates = TRUE)
inspect(transacciones)
#> items transactionID
#> [1] {l1,l2,l3} T100
#> [2] {l2,l4} T200
#> [3] {l2,l3} T300
#> [4] {l1,l2,l3} T400
#> [5] {l1,l3} T500
#> [6] {l2,l3} T600
#> [7] {l1,l3} T700
#> [8] {l1,l2,l3,l5} T800
#> [9] {l1,l2,l3} T900
Created on 2022-11-20 with reprex v2.0.2
Согласно документации функции read.transactions можно использовать аргумент cols
:
Для одиночного формата cols представляет собой числовой или символьный вектор длины два, дающие номера или имена столбцов (полей) с идентификаторы транзакций и товаров соответственно. Если символ, первая строка файла считается заголовком с именами столбцов. Для корзины cols может быть числовым скаляром, указывающим номер столбца (поле) с идентификаторами транзакций. Если cols = NULL, данные не содержать идентификаторы транзакций.
Таким образом, вы можете указать свои столбцы числовым вектором, например c(1,2)
. Вот воспроизводимый пример:
text = 'transactionID item
T100 l1,l2,l3
T200 l2,l4
T300 l2,l3
T400 l1,l2,l3
T500 l1,l3
T600 l2,l3
T700 l1,l3
T800 l1,l2,l3,l5
T900 l1,l2,l3'
cat(text)
#> transactionID item
#> T100 l1,l2,l3
#> T200 l2,l4
#> T300 l2,l3
#> T400 l1,l2,l3
#> T500 l1,l3
#> T600 l2,l3
#> T700 l1,l3
#> T800 l1,l2,l3,l5
#> T900 l1,l2,l3
write(text, file = "trans.txt")
library(arules)
transacciones <- read.transactions(file = "~/Downloads/trans.txt", # Change to your own directory
format = "single",
sep = ",",
header = TRUE,
cols = c(1, 2),
rm.duplicates = TRUE)
inspect(transacciones)
#> items transactionID
#> [1] {l2} T100 l1
#> [2] {l4} T200 l2
#> [3] {l3} T300 l2
#> [4] {l2} T400 l1
#> [5] {l3} T500 l1
#> [6] {l3} T600 l2
#> [7] {l3} T700 l1
#> [8] {l2} T800 l1
#> [9] {l2} T900 l1
Created on 2022-11-19 with reprex v2.0.2
Привет @Norhther, а если вы попробуете добавить в функцию «skip=1»?
Привет @Norhther, я добавил некоторые изменения в код.
По-прежнему неправильно читаются элементы в транзакции, т. Е. Элементы в первой строке должны быть
l1,l2,l3