как преобразовать data.frame в транзакции для рулов

Я читаю данные из файла csv, данные имеют 3 столбца, один - идентификатор транзакции, два других - продукт и категория продукта. Мне нужно преобразовать это в транзакции, чтобы использовать функцию apriori в правилах. Он показывает ошибку, когда я конвертирую в транзакции:

dat <- read.csv("spss.csv",head=TRUE,sep="," , as.is = T)
dat[,2] <- factor(dat[,2])
dat[,3] <- factor(dat[,3])
spssdat <- dat[,c(1,2,3)]
str(spssdat)

'data.frame':   108919 obs. of  3 variables:
 $ Transaction_id: int  3000312 3000312 3001972 3003361 3003361 3003361 3003361 3003361 3003361 3004637 ...
 $ product_catalog : Factor w/ 9 levels "AIM","BA","IM",..: 1 1 5 7 7 7 7 7 7 1 ...
 $ product      : Factor w/ 332 levels "ACM","ACTG/AIM",..: 7 7 159 61 61 61 61 61 61 7 ...

trans4 <- as(spssdat, "transactions")

Error in as(spssdat, "transactions") : 
  no method or default for coercing “data.frame” to “transactions”

Если данные содержат только два столбца, они могут работать следующим образом:

trans4 <- as(split(spssdat[,2], spssdat[,1]), "transactions")

Но я не знаю, как конвертировать, когда у меня 3 столбца. Обычно есть дополнительные столбцы, такие как атрибуты категорий, атрибуты клиентов. поэтому столбец обычно больше 2 столбцов. нужно найти правила между несколькими столбцами.


person dennis ding    schedule 26.06.2013    source источник


Ответы (3)


Я нашел некоторую информацию, которая сработала для меня на этом веб-сайте. Разрешите скопировать соответствующий абзац:

Фрейм данных может быть в нормализованной (одиночной) форме или в форме плоского файла (корзина).
Когда файл находится в корзине это означает, что каждая запись представляет транзакцию, где элементы в корзине представлены столбцами.
Когда набор данных находится в одиночной форме, это означает, что каждая запись представляет собой один элемент, и каждый элемент содержит идентификатор транзакции.

Для загрузки транзакций из файла используйте read.transactions. И в вашем, и в моем случае файл находится в единой форме.
Я использовал следующий код для загрузки файла .csv как transactions:

trans = read.transactions("some_data.csv", format = "single", sep = ",", cols = c("transactionID", "productID"))

Чтобы полностью понять приведенную выше команду, взгляните на read.transactions руководство, доступное после ввода ?read.transactions в консоли R.

person Michał Rybak    schedule 31.03.2014
comment
Я немного запутался, как эта функция должна работать. У меня есть CSV-файл с заголовками столбцов. Столбец ID представляет собой набор дат. Все остальные столбцы представляют собой двоичные единицы и нули. Эта функция предназначена для анализа таких данных? Когда я пытаюсь запустить предоставленный вами код, мне кажется, что он не работает. - person Stan Shunpike; 30.10.2016
comment
Прошло довольно много времени с тех пор, как я работал в R, но я думаю, что код должен работать, пока вы передаете функции соответствующие заголовки столбцов (cols) и разделитель (sep). Сложно сказать без примера вашего формата данных. - person Michał Rybak; 31.10.2016
comment
Большое спасибо ... Я почти изобрел горячее полотенце, прежде чем прочитал ваш ответ. Сработало отлично. - person Rodrigo; 03.07.2017

Я пытался сделать то же самое, и после того, как я факторизовал все свои столбцы в data.frame, с которым я работал, я все еще не мог преобразовать его в itemMatrix транзакций. Затем я понял, что никогда не загружал повторно пакет "arules" для сеанса, в котором работал. Очень глупая ошибка, но я просто хотел упомянуть об этом на случай, если кто-то еще столкнется с той же проблемой, сначала попробуйте простое решение:

library("arules")
person Charlie    schedule 17.02.2015

Вам необходимо сначала преобразовать Transaction_id в факторную переменную.

person Farmer Bob    schedule 26.08.2013