現在のプロジェクトでは、大量のテーブル データ (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=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
Recipient はolddata
オブジェクトの最初の変数名であることに注意してください。Recipient=X
次の変数名に変更して繰り返すときに、すべての観測を行った後。500 万を超える観測値を含むファイルになってしまいます...おっと! これは、ネストされた for ループに対する私の最初の真の試みです。これが最善のアプローチなのか、それともより良いアプローチがあるのか はわかりません。
ご意見やご感想をお寄せいただきありがとうございます。