2017-09-05 7 views
0

ショッピングアイテムの文字ベクタをアルツールの「トランザクション」に変換するのを手伝ってください。例えば、トランザクション1は、リンゴ、バナナ二つの項目を含むベクトルの各要素は、「」は、単一のトランザクションで購入したアイテムを表し、そしてアイテムがスペースで区切られアルファベットのトランザクションに文字ベクタを変換する

shopping_items <- c("apple banana", "orange", "tea orange beef") 

:元のデータのようなものです。私はこれを "トランザクション"型に変換して、それをarulesで処理することはできますか?

ありがとうございます!

答えて

1

これは短いバージョンです:

library(arules) 
shopping_items <- c("apple banana", "orange", "tea orange beef")  

trans <- as(strsplit(shopping_items, " "), "transactions") 

inspect(trans) 
    items    
[1] {apple,banana} 
[2] {orange}   
[3] {beef,orange,tea} 
2

実装はおそらく最適ではありませんが、改善することができます。

library(stringi) 
library(arules) 
library(purrr) 

shopping_items <- c("apple banana", "orange", "tea orange beef") 

str <- paste(shopping_items,collapse = ' ') 

# unique items 
str_un <- unique(unlist(stri_split_fixed(str,' '))) 

# create a dataframe with dimensions: 
# length(shopping_items) x length(str_un) 
df <- as.data.frame(matrix(rep(0,length(str_un)*length(shopping_items)),ncol=length(str_un))) 
names(df) <- str_un 

# positions of 1's in each column 
vecs <- map(str_un,grep,shopping_items) 

sapply(1:length(str_un), function(x) df[,x][vecs[[x]]] <<- 1) 
df[] <- lapply(df,as.factor) 

# Generate a transactions dataset. 
tr <- as(df, "transactions") 

# Generate the association rules. 
# rules <- apriori(tr, ... 
関連する問題