2017-05-26 23 views
1

我有一個表的形式bigdata:如何基於一個欄找到相同的行,並將其標註爲組

Filename A  B 
    xxxxx  1  2 
    xxxxx  3  4 
    xxxxx  5  5 
    xxxxx  6  . 
    xxxxx  .  . 
    yyyyy  .  . 
    yyyyy 
    yyyyy 
    yyyyy 
    zzzzz 
    zzzzz 

我需要掃描的第一列的所有行(10,000行大約),並查看文件名更改的位置併爲每個唯一文件名創建一個標籤。通過這種方式,我可以使用生成的標籤創建另一列。

file filename A  B 
    1  xxxxx 
      xxxxx 
      xxxxx 
    2  yyyyy 
      yyyyy 
      yyyyy 
    3  zzzzz 
      zzzzz 

此外,我需要找到列A中每個唯一文件(文件1,文件2 ...)的最大值。任何建議,將不勝感激。由於

回答

1

我會用樣本table開始喜歡在你的榜樣:

T = 

    Filename A  B 
    ________ __ _ 

    'xxxxx'  4 4 
    'xxxxx'  6 2 
    'xxxxx'  1 8 
    'xxxxx'  1 4 
    'xxxxx'  6 6 
    'yyyyy'  8 2 
    'yyyyy'  10 7 
    'yyyyy'  2 3 
    'yyyyy'  6 7 
    'zzzzz'  5 7 
    'zzzzz'  1 8 

我們可以提取文件名的第一列和使用功能unique創建一套指標(即標籤)的每個獨特的文件。然後,我們可以從標籤這一載體創建一個表,並與我們現有的表串連它:

[~, ~, index] = unique(T.Filename, 'stable'); 
T = [table(index, 'VariableNames', {'Label'}) T]; 

T = 

    Label Filename A  B 
    _____ ________ __ _ 

    1  'xxxxx'  4 4 
    1  'xxxxx'  6 2 
    1  'xxxxx'  1 8 
    1  'xxxxx'  1 4 
    1  'xxxxx'  6 6 
    2  'yyyyy'  8 2 
    2  'yyyyy'  10 7 
    2  'yyyyy'  2 3 
    2  'yyyyy'  6 7 
    3  'zzzzz'  5 7 
    3  'zzzzz'  1 8 

然後我們就可以使用這個標籤矢量與accumarray收集A列的最大值爲每一個獨特的文件:

maxVals = accumarray(T.Label, T.A, [], @max) 

maxVals = 

    6 % For file 1 
    10 % For file 2 
    5 % For file 3 
+0

它的作品完美!謝謝 – DaphFab

相關問題