2017-08-15 95 views
-1

,我有以下数据的data.frame:如何将data.frame转换为R中arules的事务数据?

行:用户
列:不同的项目的编码二进制

User Item1 Item2 ItemM 
1  0  1  1 
2  0  1  1 
3  1  1  1 
4  1  0  1 
N  1  1  1 

我怎样才能改变我data.frame到事务逐行篮 使用R中的“arules”包?

感谢您的帮助!

+0

请问您能显示预期的输出吗? – Sagar

+0

我想知道哪些项目经常一起购买以及项目组合的相关程度如何。 所以:我有数据按行约每个用户约16个项目 - >即:用户1:(0,1,0,0,0,0,0,0,1,1,1,1, 1,0,1) – ira01

+0

我已经尝试将我的data.frame中的项目转换为因子,并将其转换为“as(myDataFrame,”transactions“)”,但做了arule之后的输出结果并不符合我的预期。 – ira01

回答

0

希望这有助于!

library(arules) 
df <- data.frame(
    User = c(1,2,3,4), 
    Item1 = c(0,0,1,1), 
    Item2 = c(1,1,1,0), 
    Item3 = c(1,1,1,1)) 
l = lapply(apply(df[,-1], 1, function(x) names(df[,-1])[x==1]), 
     function(x) paste(x,collapse = ",")) 
write(sapply(l, function(x) toString(x)), file = "demo_basket") 
tr <- read.transactions("demo_basket", format = "basket", sep=",") 
+0

效果很好,thx! – ira01

+0

很高兴它帮助! – Prem

0

@ ira01 - 以下内容可能接近您的期望。发现另一个问题(https://stackoverflow.com/a/22793606/8382207):

> simplify2array(
    apply(
     df[1:4], 1, 
     function(x) paste(names(df[1:4])[x != 0], sep = " ") 
    ) 
) 

[[1]] 
[1] "User" "Item2" "ItemM" 

[[2]] 
[1] "User" "Item2" "ItemM" 

[[3]] 
[1] "User" "Item1" "Item2" "ItemM" 

[[4]] 
[1] "User" "Item1" "ItemM" 

[[5]] 
[1] "User" "Item1" "Item2" "ItemM" 
+0

效果很好,thx! 关于此解决方案的另一个问题是:如果数据集很大(对许多列?!),解决方案不再正常工作吗?我有80,000个用户的16个项目。在最多15个项目列上,它工作得很好,还有一个项目(包括许多“1”值),结果为假 – ira01

+0

工作在任意数量的列和行上。我尝试了本地,并将输出导出到一个csv文件来读取。我认为由于包装,控制台没有正确显示响应。 – Sagar

相关问题