2017-11-03 36 views
0

こんにちは、私はBasket for Associationのルールの検証をしようとしています。私は同じ列に自分のデータフレームの組み合わせを作成したいと思います。の組み合わせR

ので、ユーザーIDとバスケットのこのDF、

> head(validDF) 
    UserID     Basket 
1 935   Toy Story (1995) 
2 935 Dead Man Walking (1995) 
3 935 Mr. Holland's Opus (1995) 
4 936    Fargo (1996) 
5 936   Rock The (1996) 
6 936   Twister (1996) 

から例えば私は、これらの組み合わせを作成したい:

UserID     Basket 
1 935   Toy Story (1995), Dead Man Walking (1995) 
2 935 Dead Man Walking (1995), Toy Story (1995) 
3 935 Mr. Holland's Opus (1995), Toy Story (1995) 
4 935 Mr. Holland's Opus (1995), Dead Man Walking (1995) 
5 936    Fargo (1996), Rock The (1996) 
6 936   Rock The (1996), Fargo (1996) 
7 936   Twister (1996), Fargo (1996) 
8 936   Twister (1996), Rock The (1996) 

誰もがそれを行うにはどのように任意のアイデアを持って?

Rを使用してデータセットのUserIdに基づいてこれらの組み合わせを生成するには、Rは私の最も強い言語ではありません。だから、どんな助けもありがとう!

+0

ものは順列ではありません、彼らはデッドマンズない限り、組み合わせ(ですウォーキング/トイストーリーは、トイストーリー/デッドマンウォーキングとは違う) '?combn'を見るかSOで検索する – MichaelChirico

+0

組み合わせをバスケット変数に追加する必要はありますか?あなたが列挙した組み合わせは単なるランダムであるか、またはその背後に特定のルールがありますか?私の場合は、ユーザーIDプールからの置換えによるランダムサンプリングのように見えます。 'group_by()'と 'sample_n()'または 'sample_frac()'が役に立ちます。 – FAMG

答えて

0
# data frame 
    validDF = data.frame(
    UserID = c(935, 935, 935, 936, 936, 936),     
    Basket = c("Toy Story (1995)", "Dead Man Walking (1995)", "Mr. Holland's Opus (1995)", 
       "Fargo (1996)", "Rock The (1996)", "Twister (1996)")) 

    res = lapply(unique(validDF$UserID), function(x){ 
     ls_Basket <- as.character(validDF$Basket[validDF$UserID == x]) 
     res_int = permutations(n = 3, r=2, v= ls_Basket) 
     data.frame(UserID = x, Basket = apply(res_int, 1, paste, collapse = ", ")) 
    }) 
    res <- do.call(rbind, res) 

しかし、あなたの例では、あなたが順列(3本の映画=> 6つの順列)との組み合わせ(3本の映画=> 3の組み合わせ)を混ぜ