2016-04-06 9 views
1

私は販売データ、すなわち消費者が購入した商品の情報を持っています。アフィニティ分析のためのトランザクションデータに変換する必要があります。列内のデータをトランザクションに変換するR

データはこのようなものです:

ID=c("A123","A123","A123","A123","B456","B456","B456") 
item=c("bread", "butter", "milk", "eggs", "meat","milk", "peas") 

data.frame(cbind(ID, item)) 
    ID item 
1 A123 bread 
2 A123 butter 
3 A123 milk 
4 A123 eggs 
5 B456 meat 
6 B456 milk 
7 B456 peas 

しかし、どのように私はこのフォームにそれを得ることができる?:

ID basket 
A123 bread,butter,milk,eggs 
B456 meat,milk,peas 
+0

ところで、あなたは 'data.frame(cbind(x))'を避けたいと思います。なぜなら、すべてのcolを強制的に文字にするからです。あなたのqをその複製物として閉じない理由がある場合は、私にお知らせください。 – Frank

+2

私はこれがdublicateだと思う:http://stackoverflow.com/questions/17313450/how-to-convert-data-frame-to-transactions-for-arules、それは私にエラーを与えていた: split(df2 [、2]、df2 [、1])、 "transactions"): "list"を "transactions"に強制するメソッドやデフォルトはありませんが、エラーはリストではありませんが、 arulesをロードしていませんでした。ルークは私の問題を解決した – ElinaJ

答えて

4

あなたが何をしたいのかに応じて、多分

library(arules) 
(trans <- as(split(df$item, df$ID), "transactions")) 
# transactions in sparse format with 
# 2 transactions (rows) and 
# 6 items (columns) 
inspect(trans) 
# items     transactionID 
# 1 {bread,butter,eggs,milk} A123   
# 2 {meat,milk,peas}   B456 

または

aggregate(item~ID, df, paste, collapse=",") 
#  ID     item 
# 1 A123 bread,butter,milk,eggs 
# 2 B456   meat,milk,peas