2017-08-03 16 views
1

私は2つの推奨システムを作成し、それらが推奨する製品を希望し、を参照していくつの製品が相互であるかを確認します。私は2つの結果をデータフレームに結合しました.1つの推薦システム列は「z」で始まり、「z」で始まり、「b」で始まります。R:ベクトルの2つのグループを比較する

例データ:

df <- data.frame(z1 = c("a", "s", "d"), z2 = c("z", "x", "c"), z3 = c("q", "w", "e"), 
      b1 = c("w", "a", "e"), b2 = c("a", "i", "r"), b3 = c("z", "w", "y")) 

ID z1 z2 z3 b1 b2 b3 
1 a z q q a z 
2 s x w a i r 
3 d c e r e y 

望ましい結果:

ID z1 z2 z3 b1 b2 b3 mutual_recommendation 
1 a z q q a z 3 
2 s x w a i r 0 
3 d c e e r y 1 

問題は順序が同じで、すべての組み合わせをcomperingするケースであるか、ifelseはたくさんのだろうではないかもしれないということです特に、Top-N推奨の数が10に変更された場合。

答えて

2

applyを使用して、データセットのサブセットの行をループすることができますe 'ID'欄)、lengthintersectの最初の3つと次の3つの要素の

df$mutual_recommendation <- apply(df[-1], 1, FUN = function(x) 
         length(intersect(x[1:3], x[4:6]))) 
df$mutual_recommendation 
#[1] 3 0 1 
関連する問題