2016-04-20 27 views
0

私は異なるチームを表す列Aを持つバスケットボールのデータセットを持っています。たとえば、列Aが "The Warriors"と一致したデータセットの最後の数行を抽出するには良い方法がありますか?テーブルの現在の行に一致する前の行を見つける

私がここで意味するのは、列Aが「戦士」などと言った現在の行の前に最後の3行を探したいということです。 R(またはSQLまたはMatlab)でこれをどのようにしますか?

+0

注RDBMSのテーブルの行がクエリ自体の中で宣言それ以外には順序がありません。 – Strawberry

答えて

1

私はMatlabで解決策を提案できます。

私はちょうどデモのために単一の列Aで最初のランダムテーブルで作成してみましょう:

T = 

      A  
    ______________ 

    'The Warriors' 
    '43'   
    '38'   
    '40'   
    '49'   
    '71'   
    '69'   
    '64'   
    '67'   
    'The Warriors' 
    'The Warriors' 
    'The Warriors' 
    '131'   
    'The Warriors' 
    '119'   
    '124'   
    '93'   
    '109'   
    '77'   
    'The Warriors' 
    '83'   
    '117'   
    '75'   
    '122'   
    '80'   
    'Smith'  
    'Johnson'  
    'Williams'  
    'Jones'  
    'Brown' 

今では含まれていブールベクトルを作成することが可能ですtrue(1)の場合の位置iで実際

matchresult=cellfun(@(x) strcmp(x,'The Warriors'),T.A); 

matchresultの形式があります:

i番目の行は、文字列 'The Warriors'が含まれています
matchresult = 

    1 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    1 
    1 
    1 
    0 
    1 
    0 
    0 
    0 
    0 
    0 
    1 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 

そして今、我々は最後の3行を見つけるために、全体ではなく、テーブルのこのベクトルをスキャンすることができます:

for i=4:length(matchresult)     % since we want 3 rows we can start scanning from the 4th 
    if(sum(matchresult(1:i-1))>=3)   % if there are at least 3 ones in previous rows 
     fprintf('Scanning row #%d:\n',i); % see the row index we're scanning 
     find(matchresult((1:i-1)),3,'last') % find 1s in previous rows and display last 3 indices 
    end 
end 
関連する問題