我正在使用R,并且有一个如下所示的数据集
[1, 2, 3, ""]
[1, 2, "", 4]
[1,"", "", ""]
我将这些值读入事务对象,然后将它们传递给 eclat 或先验以进行频繁的项集评估。 当我的常用项集如下所示时,会出现此问题:
{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)
谢谢马 特
您遇到的问题归结为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")
en 示例向您展示它是如何工作的:
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