Преобразование строк в наборы элементов в 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))