使用数据集复制问题 -
来源:https://archive.ics.uci.edu/ml/datasets/Online+Retail#
删除除InvoiceID&之外的所有列。说明
现在你还剩下这样的事情:
InvoiceNo Description
1 536365 CREAM CUPID HEARTS COAT HANGER
2 536365 GLASS STAR FROSTED T-LIGHT HOLDER
3 536365针织领带热水瓶
4 536365红色WOOLLY HOTTIE白色心脏。
5 536365 SET 7 BABUSHKA NESTING BOXES
6 536365白色悬挂式T型灯架
7 536365白色金属灯笼
8 536366手持红色POLKA DOT
9 536366 HAND WARMER UNION JACK
10 536367彩色鸟类饰品
11 536367 6盒装彩色蛋糕盒
现在,我想在此数据集上运行Apriori
但由于arules所需的数据必须为;
trnx。产品。
1 A B C D
2 D E F A
所以,我尝试使用df_trans:
df_trans< - as(split(uci_retail $ Description,uci_retail $ InvoiceNo)," transactions")
asMethod(object)出错: 不能用包含重复项目的交易强制列表
另外,我尝试使用qdap替代,但没有运气。
任何人都可以建议一种替代方法来转置数据,以便它可以用来执行市场预订数据,或者能够纠正我做错的任何事情。
的问候,
k.soni
答案 0 :(得分:0)
使用arules包中的read.transactions格式="单":
txs <- "InvoiceNo;StockCode;Description;Quantity;InvoiceDate;UnitPrice;CustomerID;Country
536365;85123A;WHITE HANGING HEART T-LIGHT HOLDER;6;01/12/2010 08:26;2,55;17850;United Kingdom
536365;71053;WHITE METAL LANTERN;6;01/12/2010 08:26;3,39;17850;United Kingdom ...........
txs是从作为输入
给出的文件中提取的一个字符串newdat <- read.table(text=txs, stringsAsFactors=FALSE, sep = ";", header = T)
head(newdat)
trans <- newdat[,1:2]
write.table(trans, "txs.txt", row.names = F, sep = ";")
我选择了列InvoiceNo和StockCode(而不是描述)
trans = read.transactions("txs.txt", format = "single", sep=";",cols = c(1,2));
inspect(trans)
我们有一些重复,正如k所指出的那样。超声处理
例如
> InvoiceNo StockCode
480962 C577330 S
480963 C577330 S
480964 C577330 S
可能是在tx中多次购买的物品)
尝试:
df_trans = df_trans [!duplicated( df_trans ), ]
sum(duplicated( df_trans )) == 0
df_trans <- as(split( df_trans $StockCode, df_trans $InvoiceNo), "transactions")