2017-08-19 22 views
0

私は、セットデータフレームを持っています。私の目的は、RのArulesパッケージを使用して市場バスケット分析を行うためにデータフレームをトランザクションデータに変換することです。データフレームのトランザクションデータへの変換に関するオンライン調査をいくつか行っています(例えば、How to prep transaction data into basket for arulesおよびTransform csv into transactions for arules)得たものは違っていた。以下はR(arules)データフレームをトランザクションに変換し、NAを削除します。

dput(DF)

structure(list(Transaction_ID = c("A001", "A002", "A003", "A004", "A005", "A006"), 
Fruits = c(NA, "Apple", "Orange", NA, "Pear", "Grape"), 
Vegetables = c(NA, NA, NA, "Potato", NA, "Yam"), 
Personal = c("ToothP", "ToothP", NA, "ToothB", "ToothB", NA), 
Drink = c("Coff", NA, "Coff", "Milk", "Milk", "Coff"), 
Other = c(NA, NA, NA, NA, "Promo", NA)), 
.Names = c("Transaction_ID", "Fruits", "Vegetables", "Personal", "Drink", "Other"), 
class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -6L)) 

私のデータフレーム構造は

Transaction_ID Fruits Vegetables Personal Drink Other 
     A001  NA  NA  ToothP Coff NA 
     A002  Apple  NA  ToothP NA  NA 
     A003  Orange  NA   NA  Coff NA 
     A004  NA  Potato  ToothB Milk NA 
     A005  Pear  NA  ToothB Milk Promo 
     A006  Grape  Yam   NA  Coff NA 

トランザクションデータに各列

sapply(df, class) 
Transaction_ID   Fruits  Vegetables  Personal   Drink   Other 
"character" "character" "character" "character" "character" "character" 

変換のデータフレームのためのクラス

data <- as(split(df[,"Fruits"], df[,"Vegetables"],df[,"Personal"], df[,"Drink"], df[,"Other"]), "transactions") 
inspect(data) 
012です私は、トランザクションデータが正常に変換されましたが、私は思っていた

[1] {NA,NA,ToothP,Coff,NA} 
[2] {Apple,NA,ToothP,NA,NA} 
[3] {Orange,NA,NA,Coff,NA} 
[4] {NA,Potato,ToothB,Milk,NA} 
[5] {Pear,NA,ToothB,Milk,Promo} 
[6] {Grape,Yam,NA,Coff,NA} 

を得たの

結果NA項目を削除する方法はありますか?なぜならNAが取引リストに残っていればアイテムとして考慮するからです。

+0

例を再現できません。あなたは 'dput(df)'を提供してもらえますか? –

+0

こんにちはスティーブン、dput(df)を追加して私の投稿を編集しました:) –

答えて

0

オガスターリが正しい。ここには、トランザクションIDも処理する完全なコードがあります。

library("arules") 
library("dplyr") ### for dbl_df 
df <- structure(list(Transaction_ID = c("A001", "A002", "A003", "A004", "A005", "A006"), 
    Fruits = c(NA, "Apple", "Orange", NA, "Pear", "Grape"), 
    Vegetables = c(NA, NA, NA, "Potato", NA, "Yam"), 
    Personal = c("ToothP", "ToothP", NA, "ToothB", "ToothB", NA), 
    Drink = c("Coff", NA, "Coff", "Milk", "Milk", "Coff"), 
    Other = c(NA, NA, NA, NA, "Promo", NA)), 
    .Names = c("Transaction_ID", "Fruits", "Vegetables", "Personal", "Drink", "Other"), 
    class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -6L)) 

### remove transaction IDs 
tid <- as.character(df[["Transaction_ID"]]) 
df <- df[,-1] 

### make all columns factors 
for(i in 1:ncol(df)) df[[i]] <- as.factor(df[[i]]) 

trans <- as(df, "transactions") 

### set transactionIDs 
transactionInfo(trans)[["transactionID"]] <- tid 

inspect(trans) 

    items           transactionID 
[1] {Personal=ToothP,Drink=Coff}     A001   
[2] {Personal=ToothP}        A002   
[3] {Drink=Coff}         A003   
[4] {Vegetables=Potato,Personal=ToothB,Drink=Milk} A004   
[5] {Personal=ToothB,Drink=Milk,Other=Promo}  A005   
[6] {Vegetables=Yam,Drink=Coff}     A006   
+0

こんにちはマイケル、あなたの共有のおかげで!私の場合は動作しますが、(###トランザクションIDを削除する)部分に関して1つの問題があります。私は自分のtransactionIDが見つからなかったことを発見しました。私はトランザクションIDを削除し、それを再びtransに設定しました。たぶん、一時ファイルがありませんでしたか? –

+0

tid < - as.character(df [["Transaction_ID"]])、tidの戻り値はNULL –

+0

@ycです。koong私は2つのライブラリ文を追加しました。その例は自己完結型であり、arulesとdplyrをロードします(データがtbl_dfなので必要です)。それは今問題なく新鮮なセッションで私のために走ります。 –

0

私はあなたにこのソリューションを提案できますが、あなたが探しているものがあるかどうかわかりません。

dput(DF)、各列クラッセはすべて "ファクター" のトランザクションデータへ

sapply(df, class) 
Transaction_ID   Fruits  Vegetables  Personal   Drink   Other 
     "factor"  "factor"  "factor"  "factor"  "factor"  "factor" 

変換データフレームであることを

df <- data.frame(structure(list(Transaction_ID = as.factor(c("A001", "A002", "A003", "A004", "A005", "A006")), 
       Fruits = as.factor(c(NA, "Apple", "Orange", NA, "Pear", "Grape")), 
       Vegetables = as.factor(c(NA, NA, NA, "Potato", NA, "Yam")), 
       Personal = as.factor(c("ToothP", "ToothP", NA, "ToothB", "ToothB", NA)), 
       Drink = as.factor(c("Coff", NA, "Coff", "Milk", "Milk", "Coff")), 
       Other = as.factor(c(NA, NA, NA, NA, "Promo", NA))), 
      .Names = c("Transaction_ID", "Fruits", "Vegetables", "Personal", "Drink", "Other"), 
      class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -6L))) 

クラス

data <- as(df, "transactions") 
inspect(data) 

私はここにconvert data frame in r to transaction or an itemMatrixソリューションの一部を発見した私は

 items     transactionID 
[1] {Transaction_ID=A001,    
    Personal=ToothP,     
    Drink=Coff}      1 
[2] {Transaction_ID=A002,    
    Fruits=Apple,      
    Personal=ToothP}     2 
[3] {Transaction_ID=A003,    
    Fruits=Orange,      
    Drink=Coff}      3 
[4] {Transaction_ID=A004,    
    Vegetables=Potato,     
    Personal=ToothB,     
    Drink=Milk}      4 
[5] {Transaction_ID=A005,    
    Fruits=Pear,      
    Personal=ToothB,     
    Drink=Milk,      
    Other=Promo}      5 
[6] {Transaction_ID=A006,    
    Fruits=Grape,      
    Vegetables=Yam,     
    Drink=Coff}      6 

を持っている結果。さらに、あなたのコマンドがそうであるようです

は、2つの列だけを含むdata.frameにのみ機能します。

関連する問題