0

对于当前的项目,我正在尝试找到一种方法将大量表数据(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=TRUEcolumnnameB=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 循环。不确定这是最好的方法还是有更好的方法。

提前感谢您可能有的任何想法或见解。

4

0 回答 0