2017-05-26 4 views
1

ich eine bigdata in Form einer Tabelle haben:Wie die identischen Zeilen zu finden, basierend auf einer Spalte und beschriften Sie sie in Gruppen

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

Ich brauche die erste Spalte für alle Zeilen zu scannen (10.000 Zeilen approach) und sehen Sie, wo sich der Dateiname ändert und erstellen Sie eine Bezeichnung für jeden eindeutigen Dateinamen. Auf diese Weise hätte ich eine andere Spalte mit den erzeugten Etiketten erstellt.

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

Auch ich muss den maximalen Wert in Spalte A für jede eindeutige Datei (Datei 1, Datei 2 ...) finden. Irgendwelche Vorschläge würden geschätzt werden. Dank

Antwort

1

ich mit einer Probe table wie in Ihrem Beispiel beginnen würde:

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 

Wir können die erste Spalte der Dateinamen extrahieren und verwenden Sie die Funktion unique eine Reihe von Indizes (dh Etiketten) erstellen für jede eindeutige Datei. Wir können dann eine Tabelle aus diesem Vektor von Etikett erstellen und verketten es mit unserer bestehenden Tabelle:

[~, ~, 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 

wir dann dieses Label Vektor mit accumarray verwenden können, den Maximalwert der Spalte A für jede einzelne Datei zu sammeln:

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

maxVals = 

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

Es funktioniert perfekt !! Vielen Dank – DaphFab

Verwandte Themen