Преобразование строк в наборы элементов в R, чтобы использовать arules

У меня есть результаты опроса данных в следующем формате

ResponseID  Reason1  Reason2  Reason3 ... 
1           'Event'  'Tour'   'Other'
2           'Tour'   'Other'
3           'Event'  'Program'

Для каждого респондента они выбрали причину посещения парка.

Я хотел бы применить некоторые правила ассоциации к ответам респондента, но не могу понять, как получить данные в соответствующей форме.

Я думаю, это будет выглядеть примерно так

ResponseID  Itemset
1           {'Event','Tour','Other'}
2           {'Tour', 'Other'}
3           {'Event','Program'}

но я не смог расшифровать документацию по ItemMatrix, и R не является языком, на котором я очень хорошо знаком - спасибо!

1 ответ

Запишите фрейм данных в файл с write.table а затем использовал read.transactions с format = "basket",

Если вам нужно использовать arules Пакет, глядя на ваши теги, может быть, вам нужно, чтобы ваши данные были в транзакционной форме, а не просто изменение формы данных:

library(arules)
# your data, I've filled the blanks with NA: due there are not some of your data to
# copy and paste in R, I supposed that
trans <- read.table(text = "ResponseID  Reason1  Reason2  Reason3 
1           'Event'  'Tour'   'Other'
2           'Tour'   'Other'  NA
3           'Event'  'Program' NA",header = T)

Сначала мы можем работать с данными, чтобы преобразовать их:

library(reshape2)                            # for melt(): there should be also a dplyr() equivalent
library(dplyr)                               # for pipe operator, select, filter
trans <- melt(trans, id = "ResponseID") %>%  # data in long format
         filter(!is.na(value)) %>%           # remove empty lines
         select(-variable)                   # remove useless column
trans
  ResponseID   value
1          1   Event
2          2    Tour
3          3   Event
4          1    Tour
5          2   Other
6          3 Program
7          1   Other

Теперь мы готовы поместить их в transactions Набор данных:

trans <- as(split(trans[,"value"], trans[,"ResponseID"]), "transactions")
inspect(trans)
    items              transactionID
[1] {Event,Other,Tour} 1            
[2] {Other,Tour}       2            
[3] {Event,Program}    3    

И, наконец, вы можете попробовать apriori алгоритм например:

 rules <- apriori(trans, parameter = list(supp = 0.6, conf = 0.8, target="rules", minlen=2))
Другие вопросы по тегам