从事务对象中删除列标签

Posted

技术标签:

【中文标题】从事务对象中删除列标签【英文标题】:Remove column labels from a transaction object 【发布时间】:2017-10-05 08:47:17 【问题描述】:

我有一个数据框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 作为单独的产品,而它们实际上是相同的。当我将它用于先验算法时,这给我带来了问题。

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

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

请帮忙。

【问题讨论】:

您如何“将其转换为事务类”(请发布代码)。 How to make a great R reproducible example? 请详细说明您的问题。目前尚不清楚您希望如何从输入数据获得所需的输出。 嗨...当我将数据帧转换为事务时,它使用列标签作为 ID。因此,它将 V1=Prod1 视为与 V2=Prod1 不同的产品。我想避免这种情况。 嗨...已发布代码 【参考方案1】:

您的数据格式有点奇怪(每笔交易中的商品数量完全相同)。要正确转换它,您不能使用 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 

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

【讨论】:

【参考方案2】:

试试这个:

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)

【讨论】:

嗨...我试过了...它给了我一个错误 data.frame 中的错误(labels = paste(v, l, sep = "="), variables = as.factor( v), : 参数暗示不同的行数:12, 0

以上是关于从事务对象中删除列标签的主要内容,如果未能解决你的问题,请参考以下文章

oracle中DDL和DML能在同一事务并一同回滚吗

Android从后台堆栈中删除事务

通过分组事务更新列

从 SQL Server 的事务日志中删除信息

knexjs使用事务从父/子表中删除行

ssh整合,从hibernate那个版本开始需要open session in view 才能开启事务?