2017-04-01 23 views
1

我在R工作组,有一个数据集,它看起来像下面删除空值行时评估怡亨和先验项集

[1, 2, 3, ""] 
[1, 2, "", 4] 
[1,"", "", ""] 

我读这些值转换为交易对象,然后将它们传递到怡亨或先验频繁项目评估。当我的频繁项集看起来像下面的问题出现了:

{1,""} 
{2,3,""} 

我想,因为我认为它减慢处理,也不会使从预测的角度来看任何意义,从计算中删除这些行。你能帮忙吗?我的R代码如下。

tr <- read.transactions("Items.csv", rm.duplicates=TRUE, format="basket",sep=",") 

dataset1 <- as.vector(t(dataset1)) 

frequentItems <- eclat (tr, parameter = list(supp = 0.03, minlen=2, maxlen = 4)) 

inspect(frequentItems) 

谢谢, 马特

+0

数据集的结构看起来很令R人感到困惑。你可以给我们提供一些我们可以自己尝试的代码,也许可以添加你的函数来的包(这是'arules'包,对不对?) –

回答

1

你有问题,可以归结为arules认为 “” 是的项目。所以如果你不想这样做,你必须首先从数据中删除所有这些值。可能的罪魁祸首是原始的csv文件。它包含空白字段,并且它们被翻译为""项目。

所以最好的办法摆脱这一点,是确保您的csv文件实际上有一个正确的格式。它应该是这样的:

item1, item2 
item1 
item2, item3 

而不是这个

"item1", "item2" 
"item1", "" 
"item2", "item3" 

为了解决代码中的问题,转换到一个列表第一:

thelist <- as(tr, "list") 

thelist <- lapply(thelist, function(i){ 
    i[i != ""] 
}) 

trnew <- as(thelist, "transactions") 

恩例子向您展示它是如何工作:

library(arules) 
# Example data 
a_list <- list(
    c("item1","item2"), 
    c("item1",""), 
    c("item2","item3"), 
    c("","item3") 
) 

tr <- as(a_list, "transactions") 

frequentItems <- eclat (tr, parameter = list(supp = 0.03, minlen=2, maxlen = 4)) 
inspect(frequentItems) 

#> items   support 
#>[1] {item2,item3} 0.25 
#>[2] {,item3}  0.25 
#>[3] {,item1}  0.25 
#>[4] {item1,item2} 0.25 

# Conversion 
thelist <- as(tr, "list") 
thelist <- lapply(thelist, function(i){ 
    i[i != ""] 
}) 
trnew <- as(thelist, "transactions") 

frequentItems <- eclat (trnew, parameter = list(supp = 0.03, minlen=2, maxlen = 4)) 
inspect(frequentItems) 

#> items   support 
#>[1] {item2,item3} 0.25 
#>[2] {item1,item2} 0.25 
+0

非常有帮助,谢谢! –