如何删除使用 arules 包读取的交易数据中的空列?
How to remove empty columns in transaction data read with the arules package?
我有一个篮子数据格式的数据集。我已经使用包调用 arules 读取了 R 中的数据集,它具有用于读取事务的内置函数,所以我使用了它并读取了我的数据集。以下是我使用的代码:
trans = read.transactions("C:/Users/HARI/Desktop/Graph_mining/transactional_data_v3.csv", format = "basket", sep=",",rm.duplicates=TRUE)
inspect(trans[1:5])
items
1 {,
ANTIVERT,
SOFTCLIX}
2 {,
CEFADROXIL,
ESTROGEN}
3 {,
BENZAMYCIN,
BETAMETH,
KEFLEX,
PERCOCET}
4 {,
ACCUTANE(RXPAK;10X10),
BENZAMYCIN}
5 {,
ALBUTEROL,
BUTISOLSODIUM,
CLARITIN,
NASACORTAQ}
如您所见,当我使用 inspect(trans)
时,它显示的每笔交易都有一个空列。我的问题是如何删除那些空列?
trans
对象的完整 dput
,请参阅 this link。
我对 arules 包不是很熟悉。我最好的猜测是使用 read.csv
读取数据,然后转换为交易格式,而不是使用提供的 read.transactions
:
tran2 <- read.csv("downloads/transactional_data.csv")
tran3 <- as(tran2, "transactions")
编辑:我认为您的数据中的空白没有被正确读入;此外,还有一些重复项也应该被过滤掉。这应该处理那个。您将需要 reshape2
包。
trans2 <- read.csv("downloads/transactional_data.csv", na.strings="", stringsAsFactors=FALSE )
trans2$id <- seq(nrow(trans2))
t2.long <- melt(trans2, id.vars="id")
t2.long$variable <- NULL
t3 <- as(lapply(split(t2.long$value, t2.long$id), unique), "transactions")
我想我已经找到了解决您的问题的方法。我拿了你的 csv 文件,在 Excel 中打开它并用 NA 替换了所有空单元格。然后我将整个内容粘贴到 LibreOffice Calc 中并将其保存回 csv,指定所有单元格都应使用双引号(奇怪的是,Excel 不会这样做,除非使用 vba 宏。你可以直接在 LibreOffice 中而不是 Excel 中读取文件,但是,用 NA 替换空单元格将需要很长时间)。那么:
trans <- read.table("d:/downloads/transactional_data_2.csv", sep=",", stringsAsFactors = TRUE, na.strings="NA", header=TRUE)
trans2 <- as(trans, "transactions")
inspect(trans2[1:5])
结果
inspect(trans[1:5])
items transactionID
1 {X1=SOFTCLIX,
X2=ANTIVERT} 1
2 {X1=ESTROGEN,
X2=CEFADROXIL} 2
3 {X1=KEFLEX,
X2=BETAMETH,
X3=PERCOCET,
X4=BENZAMYCIN} 3
4 {X1=BENZAMYCIN,
X2=ACCUTANE(RXPAK;10X10)} 4
5 {X1=CLARITIN,
X2=ALBUTEROL,
X3=NASACORTAQ,
X4=BUTISOLSODIUM} 5
我认为这就是您要查找的结果...?
我有一个篮子数据格式的数据集。我已经使用包调用 arules 读取了 R 中的数据集,它具有用于读取事务的内置函数,所以我使用了它并读取了我的数据集。以下是我使用的代码:
trans = read.transactions("C:/Users/HARI/Desktop/Graph_mining/transactional_data_v3.csv", format = "basket", sep=",",rm.duplicates=TRUE)
inspect(trans[1:5])
items
1 {,
ANTIVERT,
SOFTCLIX}
2 {,
CEFADROXIL,
ESTROGEN}
3 {,
BENZAMYCIN,
BETAMETH,
KEFLEX,
PERCOCET}
4 {,
ACCUTANE(RXPAK;10X10),
BENZAMYCIN}
5 {,
ALBUTEROL,
BUTISOLSODIUM,
CLARITIN,
NASACORTAQ}
如您所见,当我使用 inspect(trans)
时,它显示的每笔交易都有一个空列。我的问题是如何删除那些空列?
trans
对象的完整 dput
,请参阅 this link。
我对 arules 包不是很熟悉。我最好的猜测是使用 read.csv
读取数据,然后转换为交易格式,而不是使用提供的 read.transactions
:
tran2 <- read.csv("downloads/transactional_data.csv")
tran3 <- as(tran2, "transactions")
编辑:我认为您的数据中的空白没有被正确读入;此外,还有一些重复项也应该被过滤掉。这应该处理那个。您将需要 reshape2
包。
trans2 <- read.csv("downloads/transactional_data.csv", na.strings="", stringsAsFactors=FALSE )
trans2$id <- seq(nrow(trans2))
t2.long <- melt(trans2, id.vars="id")
t2.long$variable <- NULL
t3 <- as(lapply(split(t2.long$value, t2.long$id), unique), "transactions")
我想我已经找到了解决您的问题的方法。我拿了你的 csv 文件,在 Excel 中打开它并用 NA 替换了所有空单元格。然后我将整个内容粘贴到 LibreOffice Calc 中并将其保存回 csv,指定所有单元格都应使用双引号(奇怪的是,Excel 不会这样做,除非使用 vba 宏。你可以直接在 LibreOffice 中而不是 Excel 中读取文件,但是,用 NA 替换空单元格将需要很长时间)。那么:
trans <- read.table("d:/downloads/transactional_data_2.csv", sep=",", stringsAsFactors = TRUE, na.strings="NA", header=TRUE)
trans2 <- as(trans, "transactions")
inspect(trans2[1:5])
结果
inspect(trans[1:5])
items transactionID
1 {X1=SOFTCLIX,
X2=ANTIVERT} 1
2 {X1=ESTROGEN,
X2=CEFADROXIL} 2
3 {X1=KEFLEX,
X2=BETAMETH,
X3=PERCOCET,
X4=BENZAMYCIN} 3
4 {X1=BENZAMYCIN,
X2=ACCUTANE(RXPAK;10X10)} 4
5 {X1=CLARITIN,
X2=ALBUTEROL,
X3=NASACORTAQ,
X4=BUTISOLSODIUM} 5
我认为这就是您要查找的结果...?