我有以下格式的数据:
TxnId Items
1 a
1 b
1 c
2 r
2 t
其中" TxnId"和"项目"是列。我在R中导入文件并运行以下命令:
df_fact <- data.frame(lapply(MyData,as.factor))
df_trans <- as(df_fact, 'transactions')
当我运行apriori命令时会抛出错误。
rules = apriori(df_trans, parameter=list(supp=0.95, conf=0.95, target=”rules”))
inspect(rules)
#NULL
inspect(rules[1:5])
Error in inspect(rules[1:5]) :
error in evaluating the argument 'x' in selecting a method for function 'inspect': Error in slot(x, s)[i] : subscript out of bounds
另请告诉我R接受数据的格式。
答案 0 :(得分:2)
它应该像这样工作:
MyData <- read.table(header = TRUE, text = "
TxnId Items
1 a
1 b
1 c
2 a
2 b
")
library(arules)
df_trans <- as(split(MyData$Items, MyData$TxnId), "transactions")
rules <- apriori(df_trans, parameter=list(supp=0.95, conf=0.95, target="rules"))
inspect(rules)
# lhs rhs support confidence lift
# 1 {} => {a} 1 1 1
# 2 {} => {b} 1 1 1
# 3 {a} => {b} 1 1 1
# 4 {b} => {a} 1 1 1
您可能需要放宽supp
和/或conf
才能在数据集中查找规则。
答案 1 :(得分:0)
我在强制方面遇到了很多麻烦(例如'as(dataname,“transactions”......)。
我认为这是因为我有重复的记录(即,当数据采用'单一'格式时,在同一个转换中购买的同一项目不止一次)。
这最终对我有用:
Transactions<- read.transactions("Data with tx ids, item names, in
single format.csv",
rm.duplicates= TRUE, sep=",",
format = "single", cols = c(7,9));
(第7列中的tx id,第9列中的项目名称)