Предположим, у вас есть фрейм данных с идентификаторами и элементами, прописанными для каждого идентификатора. Например:
example <- data.frame(id = c(1,1,1,1,1,2,2,2,3,4,4,4,4,4,4,4,5,5,5,5),
vals = c("a","b",'c','d','e','a','b','d','c',
'd','f','g','h','a','k','l','m', 'a',
'b', 'c'))
Я хочу найти все возможные парные комбинации. Основная проблема здесь не в функционале языка R, который я могу использовать, а в логике. Как я могу перебрать все элементы и найти закономерности? Например, a
был выбран с b
3 раза в моем примере фрейма данных. Но исходный фрейм данных содержит более 30 тыс. Строк, поэтому я не могу подсчитать эти комбинации вручную. Как мне автоматизировать процесс определения количества выбранных элементов для каждого элемента?
Я думал о том, чтобы расширить свой df с помощью pivot_wider
, а затем использовать map_lgl
для поиска совпадений. Затем я столкнулся с проблемой, что мне потребуется много времени, чтобы найти все возможные комбинации, применяя map_lgl
для каждой пары элементов.
Я задавал почти тот же вопрос меньше чем месяц назад, другие пользователи ответили на него, но результат мне не нужен.
У вас есть идеи, как создать фрейм данных со всеми возможными комбинациями значений для всех идентификаторов?
id
иvals
или междуvals
? И я не уверен, что вы имеете в виду подa
, было выбрано сb
3 раза. - person yh6   schedule 04.03.2021id
= 1 у нас есть a, b, c, d, e какvals
, затем мы создаем все возможные парные комбинации между этими 5 символами. И мы повторяем эту процедуру по всем идентификаторам и, наконец, подсчитываем количество шаблонов пар. Это правильно? - person yh6   schedule 04.03.2021id == 1
выбралa
сb
,c
,d
. Сколько других идентификаторов выбрали такие же варианты? - person k1rgas   schedule 04.03.2021arules
были предложены в комментарии к ваш предыдущий пост. В сообщении, на которое я ссылался, вы обнаружите, что кодarules
довольно простой и быстрый (по крайней мере, по сравнению с другими ответами, предоставленными там). Удачи! Ваше здоровье - person Henrik   schedule 04.03.2021m = crossprod(table(example))
;m[lower.tri(m, diag = TRUE)] = NA
;na.omit(data.frame(as.table(m)))
; Пересекайте все возможные комбинации элементов списка - person Henrik   schedule 05.03.2021apriori
не работает с моим исходным набором данных с более чем 9 тыс. Строк. R просто не хватает памяти. - person k1rgas   schedule 06.03.2021apriori
в фрейм данных. У вас есть идеи, как с этим справиться? - person k1rgas   schedule 09.03.2021support = 0
, а затем удалил наборы элементов с нулевым счетчиком после, который я принудил к фрейму данных. Если вы установите дляsupport
, скажем, значение по умолчанию 0,1, вы исключите все наборы элементов с поддержкой0
уже на этапеapriori
. Это, конечно, уменьшит размер результатов. Вы можете попробовать. См. Также красивую виньетку. Удачи! - person Henrik   schedule 09.03.2021