2016-08-10 23 views
1

にインデックスを作成しますので、結果は私がmemberIdproductIdによってインデックスにそれを必要とする私は以下のように表<code>T</code>を持つテーブル

T = table({'A';'A';'B';'B';'B';'B';'C';'C';'D';'D'},... 
      {'xd';'z';'x';'y';'z';'w';'x';'wh';'z';'w'},... 
      [4;2;4;1;2;5;2;1;1;5], ... 
      'VariableNames', {'memberId', 'productId','Rating'}); 
T = 
memberId productId Rating 
________ _________ ______ 
'A'   'xd'   4  
'A'   'z'   2  
'B'   'x'   4  
'B'   'y'   1  
'B'   'z'   2  
'B'   'w'   5  
'C'   'x'   2  
'C'   'wh'   1  
'D'   'z'   1  
'D'   'w'   5 

A: {'xd' 'z'} 
B: {'x' 'y' 'z' 'w'} 
C: {'x' 'wh'} 
....... 
+0

既にそのインデックスの文字はありませんか? – Finn

+0

A:{'xd' 'z'}は、メンバーID 'A'に対するインデックスオファーを含んでいます。 'xd'と 'z'への返答 – Eli

+0

私は結果がどうなるか考えています。残念ながら、 '{'xd' 'z'}'は '{'xdz'}'になるので、あなたが望むようにはできません。あなたが作ることができるのは、テーブルの{{x '}; {' z '} ' – Finn

答えて

1

あなたがカテゴリカル配列を使用することができますし、これを行う構造体:

% convert to categorical arrays 
T.memberId = categorical(T.memberId); 
T.productId = categorical(T.productId); 
% cross-tabulate memberId vs. productId 
cross_T = crosstab(T.memberId,T.productId); 
% a function to return the productId for all 1 in row 
productId = categories(T.productId).'; 
row = @(x) productId(logical(cross_T(x,:))); 
% preform on all rows 
rBy_c = arrayfun(row,1:size(cross_T,1),'UniformOutput',false).'; 
% convert to structure for readability 
s = cell2struct(rBy_c,categories(T.memberId)) 

出力を取得するには(s):

A: {'xd' 'z'} 
B: {'w' 'x' 'y' 'z'} 
C: {'wh' 'x'} 
D: {'w' 'z'} 
+0

hello my friendの列またはセル配列の真と偽を持つ論理インデックスのRownumbersです。質問があります。手伝って頂けますか? – Eli

+0

たぶん...投稿すると、私は答えるだろう:) – EBH

+0

ありがとう。私はこの投稿に答えました:http://stackoverflow.com/questions/39722872/adding-multiple-rows-of-a-table-to-another-table – Eli

関連する問題