У меня есть данные о клиентах, в которых указано, что они покупают. Стоит только подумать, купят они это или нет. Не считается, сколько они покупают. (поэтому 0 или 1 для записей)
apple banana corn
1 1 0 1
2 0 1 0
3 1 1 1
4 0 0 0
5 1 0 1
Я хотел бы знать, какие из этих продуктов, вероятно, будут продаваться вместе.
Что я могу придумать, так это рассмотреть все перестановки, соответственно создайте переменные и суммируйте людей.
a a_b a_c b b_c a_b_c
1 0 0 1 0 0 0
2 0 0 0 1 0 0
3 0 0 0 0 0 1
4 0 0 0 0 0 0
5 0 0 1 0 0 0
sum 0 0 2 1 0 1
так что в этом небольшом примере людям нравится покупать яблоко и кукурузу вместе.
Я пробовал делать это следующим образом, но это стало очень громоздким для повторяющийся код ....
allCombs <- function(x) c(x, lapply(seq_along(x)[-1L], function(y) combn(x, y, paste0, collapse = "_")),recursive = TRUE)
name = c("a","b","c")
for (i in allCombs(name)) {
df[,i] = 0
}
condition_1 = df[,"apple"] == 1
condition_2 = df[,"banana"] == 1
condition_3 = df[,"corn"] == 1
df[condition_1 & !condition_2 & !condition_3, "a"] = 1
df[condition_1 & condition_2 & !condition_3, "a_b"] = 1
...
Я хотел бы знать, как это можно сделать более эффективным / лучшим способом, обрабатывая все перестановки.
Более того, если есть лучшие способы для решения этой проблемы будет очень полезно любое понимание. Поскольку по мере увеличения категории продукта количество перестановок растет очень быстро, а матрица результатов очень разреженная, что я думаю не очень хорошая идея.
Вот пример данных
df <- structure(list(a = c(1,0,1,0,1), b = c(0,1,1,0,0), c = c(1,0,1,0,1), class = "data.frame")
Спасибо заранее!