从事务对象中删除列标签

时间:2017-10-05 08:47:17

标签: r apriori arules

我有一个数据框df,如下所示:

df <- data.frame(V1 = c("Prod1", "Prod2", "Prod3"),
                 V2 = c("Prod3", "Prod1", "Prod2"), 
                 V3 = c("Prod2", "Prod1", "Prod3"), 
                 City = c("City1", "City2", "City3"))

当我将其转换为事务类时,使用代码:

tData <- as(df, "transactions")
inspect(tData)

我得到如下结果:

    items                                   transactionID
[1] {V1=Prod1,V2=Prod3,V3=Prod2,City=City1} 1            
[2] {V1=Prod2,V2=Prod1,V3=Prod1,City=City2} 2            
[3] {V1=Prod3,V2=Prod2,V3=Prod3,City=City3} 3   

这意味着我将V1 = Prod1和V2 = Prod1作为单独的产品实际上是相同的。当我将它用于apriori算法时,这给了我一些问题。

如何删除列标签,以便将事务对象作为:

    items                                   transactionID
[1] {Prod1,Prod3,Prod2,City1} 1            
[2] {Prod2,Prod1,Prod1,City2} 2            
[3] {Prod3,Prod2,Prod3,City3} 3         

请帮忙。

2 个答案:

答案 0 :(得分:2)

您有一种奇怪的数据格式(每个事务中的项目数完全相同)。要正确转换,您不能使用data.frame,但需要一个事务列表。

library("arules")

df <- data.frame(
  V1 = c("Prod1", "Prod2", "Prod3"),
  V2 = c("Prod3", "Prod1", "Prod2"), 
  V3 = c("Prod2", "Prod1", "Prod3"), 
  City = c("City1", "City2", "City3"))

m <- as.matrix(df)
l <- lapply(1:nrow(m), FUN = function(i) (m[i, ]))

这是列表格式,每个事务都作为列表元素。

l
[[1]]
     V1      V2      V3    City 
"Prod1" "Prod3" "Prod2" "City1" 

[[2]]
     V1      V2      V3    City 
"Prod2" "Prod1" "Prod1" "City2" 

[[3]]
     V1      V2      V3    City 
"Prod3" "Prod2" "Prod3" "City3" 

现在它可以被强制转化为

trans <- as(l, "transactions")
inspect(trans)

    items                    
[1] {City1,Prod1,Prod2,Prod3}
[2] {City2,Prod1,Prod2}      
[3] {City3,Prod2,Prod3} 

交易中有一些重复的项目,这些项目将被删除。

答案 1 :(得分:0)

试试这个:

df <- data.frame(V1 = c("Prod1", "Prod2", "Prod3"),
             V2 = c("Prod3", "Prod1", "Prod2"), 
             V3 = c("Prod2", "Prod1", "Prod3"), 
             City = c("City1", "City2", "City3"))
colnames(df)<-NULL

tData <- as(df, "transactions")
inspect(tData)