如何删除使用arules包读取的事务数据中的空列?

时间:2015-03-23 22:09:03

标签: r transactions arules

我有一个以篮子数据格式制作的数据集。我已经使用包调用arules在R中读取了该数据集,该包调用具有用于读取事务的内置函数,因此我使用它并读取我的数据集。以下是我使用的代码:

trans = read.transactions("C:/Users/HARI/Desktop/Graph_mining/transactional_data_v3.csv", format = "basket", sep=",",rm.duplicates=TRUE)
inspect(trans[1:5])
  items                  
1 {,                     
   ANTIVERT,             
   SOFTCLIX}             
2 {,                     
   CEFADROXIL,           
   ESTROGEN}             
3 {,                     
   BENZAMYCIN,           
   BETAMETH,             
   KEFLEX,               
   PERCOCET}             
4 {,                     
   ACCUTANE(RXPAK;10X10),
   BENZAMYCIN}           
5 {,                     
   ALBUTEROL,            
   BUTISOLSODIUM,        
   CLARITIN,             
   NASACORTAQ}

正如您所看到的,当我使用inspect(trans)时,它会显示每个事务中都有空列的事务。我的问题是如何删除那些空列?

对于dput对象的完整trans,请参阅this link

2 个答案:

答案 0 :(得分:3)

我想我找到了解决问题的方法。我拿了你的csv文件,在Excel中打开它并用NA替换所有空单元格。然后我将整个事情粘贴到LibreOffice Calc并将其保存回csv,指定双引号应该用于所有单元格(奇怪的是,Excel除了使用vba宏之外不会这样做。你可以直接读取文件但是,LibreOffice而不是Excel,用NA替换空单元将永远存在。然后:

trans <- read.table("d:/downloads/transactional_data_2.csv", sep=",", stringsAsFactors = TRUE, na.strings="NA", header=TRUE)
trans2 <- as(trans, "transactions")
inspect(trans2[1:5])

<强>结果

inspect(trans[1:5])

  items                      transactionID
1 {X1=SOFTCLIX,                           
   X2=ANTIVERT}                          1
2 {X1=ESTROGEN,                           
   X2=CEFADROXIL}                        2
3 {X1=KEFLEX,                             
   X2=BETAMETH,                           
   X3=PERCOCET,                           
   X4=BENZAMYCIN}                        3
4 {X1=BENZAMYCIN,                         
   X2=ACCUTANE(RXPAK;10X10)}             4
5 {X1=CLARITIN,                           
   X2=ALBUTEROL,                          
   X3=NASACORTAQ,                         
   X4=BUTISOLSODIUM}                     5

我认为这是你正在寻找的结果......?

答案 1 :(得分:2)

我对arules包不太熟悉。我最好的猜测是使用read.csv读取数据,然后转换为事务格式,而不是使用提供的read.transactions

tran2 <- read.csv("downloads/transactional_data.csv")
tran3 <- as(tran2, "transactions")

编辑:我认为数据中的空白没有被正确读取;此外,还有重复项,也应该过滤掉。这应该处理。您需要reshape2包。

trans2 <- read.csv("downloads/transactional_data.csv", na.strings="", stringsAsFactors=FALSE )
trans2$id <- seq(nrow(trans2))
t2.long <- melt(trans2, id.vars="id")
t2.long$variable <- NULL
t3 <- as(lapply(split(t2.long$value, t2.long$id), unique), "transactions")