0

現在のプロジェクトでは、大量のテーブル データ (19 変数の 300,000 以上の観測値) をルールのトランザクション データに変換する方法を見つけようとしています。多数の変数が論理的にフォーマットされています。

から次のことを試しました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

Recipient はolddataオブジェクトの最初の変数名であることに注意してください。Recipient=X次の変数名に変更して繰り返すときに、すべての観測を行った後。500 万を超える観測値を含むファイルになってしまいます...おっと! これは、ネストされた for ループに対する私の最初の真の試みです。これが最善のアプローチなのか、それともより良いアプローチがあるのか​​ はわかりません。

ご意見やご感想をお寄せいただきありがとうございます。

4

0 に答える 0