对于当前的项目,我正在尝试找到一种方法将大量表数据(19 个变量的 300,000+ obs.)转换为 arules 的事务数据。大量的变量被逻辑格式化。
我尝试了以下方法library(arules)
:newdata <- read.transactions("olddata.csv", format = "basket", rm.duplicates = FALSE, skip = 1)
但是我收到以下错误:
Error in asMethod(object) :
can not coerce list with transactions with duplicated items
我不想删除重复项,因为我丢失了太多数据,因为它会在第一次出现后删除每个重复的逻辑 T/F。
我想我可以尝试使用 for 循环来完成我的任务:
newdata <- ""
for (row in 1:nrow(olddata)) {
if (row !=1) {
newdata <- paste0(newdata, "\n")}
newdata <- paste0(newdata, row,",")
for (col in 2:ncol(olddata)) {
if (col !=2) {
newdata <- paste0(newdata, ",")}
newdata <- paste0(newdata, colnames(olddata),"=", olddata[row,col])}
}
write(newdata,"newdata.csv")`
我的目标是让每个观察值的每个变量的值如下所示:columnnameA=TRUE
、columnnameB=FALSE
等。这将消除read.transactions
函数的“重复”并保留所有数据。
但是我的输出开始看起来像这样:
[1] "1,Recipient=Thu Feb 04 21:52:00 UTC 2016,Recipient=TRUE,Recipient=TRUE,Recipient=FALSE,Recipient=TRUE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE\n2,Recipient=Thu Feb 04 21:52:00 UTC 2016,Recipient=TRUE,Recipient=TRUE,Recipient=FALSE,Recipient=TRUE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE,Recipient=FALSE\n3
请注意,收件人是我olddata
对象中的第一个变量名。在Recipient=X
它更改为下一个变量名称并重复时进行每次观察。我最终得到了一个包含超过 500 万个观察值的文件……哎呀!这是我第一次真正尝试嵌套 for 循环。不确定这是最好的方法还是有更好的方法。
提前感谢您可能有的任何想法或见解。