Вот что я попробовал. Я думаю, что вам нужно манипулировать своими данными и создавать списки. Сначала я создал идентификатор транзакции на всякий случай. Затем я преобразовал данные в длинный формат данных. К этому времени все продукты остаются в одной колонке. Я удалил все строки, которые имеют NA. Затем я преобразовал продукты в фактор. Для каждой группы (идентификатор транзакции) я создал список, содержащий все продукты. x
имеет столбец с именем whatever
. Это список, который вы хотите использовать для создания объекта транзакции.
library(tidyverse)
library(arules)
mutate(mydata, transaction_id = 1:n()) %>%
pivot_longer(cols = contains("Item"), names_to = "item", values_to = "product") %>%
filter(complete.cases(product)) %>%
mutate(product = factor(product)) %>%
group_by(transaction_id) %>%
summarize(whatever = list(product)) -> x
# Assign transaction ID as name to whatever
names(x$whatever) <- x$transaction_id
$`1`
[1] lipstick Bronzer Mascara
Levels: Bronzer Eyeliner Eyeshadow Lip gloss lipstick Mascara Nail varnish Powder Remover
$`2`
[1] Eyeshadow lipstick
Levels: Bronzer Eyeliner Eyeshadow Lip gloss lipstick Mascara Nail varnish Powder Remover
$`3`
[1] Powder Remover
Levels: Bronzer Eyeliner Eyeshadow Lip gloss lipstick Mascara Nail varnish Powder Remover
$`4`
[1] Nail varnish Lip gloss Eyeliner
Levels: Bronzer Eyeliner Eyeshadow Lip gloss lipstick Mascara Nail varnish Powder Remover
Наконец, я создал объект класса транзакции.
mybasket <- as(x$whatever, "transactions")
> summary(mybasket)
transactions as itemMatrix in sparse format with
4 rows (elements/itemsets/transactions) and
9 columns (items) and a density of 0.2777778
most frequent items:
lipstick Bronzer Eyeliner Eyeshadow Lip gloss (Other)
2 1 1 1 1 4
element (itemset/transaction) length distribution:
sizes
2 3
2 2
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.0 2.0 2.5 2.5 3.0 3.0
includes extended item information - examples:
labels
1 Bronzer
2 Eyeliner
3 Eyeshadow
includes extended transaction information - examples:
transactionID
1 1
2 2
3 3
DATA
mydata <- structure(list(Transaction = c("12/09/2001", "2/09/2001", "13/09/2002",
"14/09/2003"), Item1 = c("lipstick", "Eyeshadow", "Powder", "Nail varnish"
), Item2 = c("Bronzer", "lipstick", "Remover", "Lip gloss"),
Item3 = c("Mascara", NA, NA, "Eyeliner")), row.names = c(NA,
-4L), class = c("tbl_df", "tbl", "data.frame"))