2017-04-01 28 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

非常有幫助,謝謝! –