Правило ассоциации на "Длинном" столе в R
Я пытаюсь запустить модель ассоциации на данных ниже ("длинная таблица"):
Alarm Ticket
A T1
B T1
C T1
D T1
B T2
C T2
A T3
A T4
B T4
Но я думаю, что пакет "arules" может работать только на "широком столе". т.е.
Ticket Alarm1 Alarm2 Alarm3 Alarm4
T1 A B C D
T2 B C
T3 A
(Объединение всех сигналов одного билета в один ряд)
Так есть ли способ, которым я могу выполнить анализ ассоциации на длинной таблице, или мне нужно выполнить переформатирование таблицы "от длинной к широкой"?
Спасибо
2 ответа
Я бы предпочел такой код:
> df <- data.frame(
Alarm = c("A", "B", "C", "D", "B", "C", "A", "A", "B"),
Ticket = c(rep("T1", 4), "T2", "T2", "T3", "T4", "T4")
)
> library("arules")
> trans <- as(split(df$Alarm, df$Ticket), "transactions")
> inspect(trans)
items transactionID
1 {A,B,C,D} T1
2 {B,C} T2
3 {A} T3
4 {A,B} T4
Правила ассоциации работают только с двоичными переменными.
Вы можете использовать model.matrix, но вам нужно предоставить ему data.frame
Что-то вроде:
model.matrix( ~ alarm - 1, data = your_data)
следует создать соответствующую матрицу.
Запустите следующее, чтобы увидеть, как это работает:
alarm <- rep(c("a","b","c"),2)
ticket <- rep(c("t1","t2"),3)
df <-data.frame(cbind(alarm,ticket))
df
model.matrix(data = df, ~alarm -1)