在arules中,如何将稀疏数据帧转换为事务?

在arules中,如何将稀疏数据帧转换为事务?,r,arules,market-basket-analysis,R,Arules,Market Basket Analysis,嗨,我有一个像这样的杂货订单的稀疏数据框 library(arules) a_df <- data.frame( apple = as.factor(c(1,0,0,0,1,1)), banana = as.factor(c(0,1,1,0,0,0)), peeler = as.factor(c(1,0,0,0,1,1))) a_tran = as(a_df, "transactions" ) inspect(a_tran) rules <- apriori(a_tran, par

嗨,我有一个像这样的杂货订单的稀疏数据框

library(arules)
a_df <- data.frame(
apple = as.factor(c(1,0,0,0,1,1)),
banana = as.factor(c(0,1,1,0,0,0)),
peeler = as.factor(c(1,0,0,0,1,1)))

a_tran = as(a_df, "transactions" )
inspect(a_tran)
rules <- apriori(a_tran, parameter=list(minlen=2, supp=0.5,conf = 0.5))
inspect(rules)
谢谢。

这里有一些选择

library(magrittr)
idx <- which(a_df==1, arr.ind = T)
(lst <- split(names(a_df)[idx[,2]], idx[,1]))
# $`1`
# [1] "apple"  "peeler"
# 
# $`2`
# [1] "banana"
# 
# $`3`
# [1] "banana"
# 
# $`5`
# [1] "apple"  "peeler"
# 
# $`6`
# [1] "apple"  "peeler"

rules <- function(x, app=NULL) { 
  x %>% as("transactions") %>% apriori(parameter=list(minlen=2, supp=0.5,conf = 0.5), appearance=app) 
}
# use a list without "0"s:
lst %>% rules %>% inspect
# filter "0"s afterwards:
a_df %>% rules %>% subset(!lhs%pin%"0" & !rhs%pin%"0") %>% inspect
# filter "0"s in apriori:
a_df %>% rules(list(none = paste(names(a_df), "0", sep="="), default="both")) %>% inspect
库(magrittr)
idx%规则%>%inspect
#之后筛选“0”:
a_df%>%rules%>%子集(!lhs%pin%%“0”和!rhs%pin%%“0”)%%>%
#在apriori中筛选“0”:
a_df%>%规则(列表(无=粘贴(名称(a_df),“0”,sep=“=”,默认值=“两者”))%%>%

看起来您的数据是一个完整的0-1矩阵。以下是最快的方法:

trans <- as(a_df == "1", "transactions")
inspect(trans)

    items         
[1] {apple,peeler}
[2] {banana}      
[3] {banana}      
[4] {}            
[5] {apple,peeler}
[6] {apple,peeler}
trans
trans <- as(a_df == "1", "transactions")
inspect(trans)

    items         
[1] {apple,peeler}
[2] {banana}      
[3] {banana}      
[4] {}            
[5] {apple,peeler}
[6] {apple,peeler}