2013-12-10 4 views
1

제 3 열을 사용하여 행렬 A를 필터링하려면 행렬 B의 열을 사용합니다. 세 번째 열의 값은 쉼표로 구분됩니다.Matlab - 매트릭스를 사용하여 다른 매트릭스를 필터링하는 방법?

예 : P01이 행렬 A의 3 번째 열에 있으면 A1 값을 얻습니다. 다른 예 : P08 또는 P09 나는이 결과를 얻을 수있는 방법

A = {'A1' 5 'P01,P02,P03,P04'; 'A2' 7 'P08,P09'; 'A3' 8 'P07'; 'A4' 8 'P10,P11'}; 
B = {'P01'; 'P07'; 'P10'; 'P11'} 

A = 
    'A1' 5 'P01,P02,P03,P04' 
    'A2' 7 'P08,P09' 
    'A3' 8 'P07' 
    'A4' 8 'P10,P11' 

B = 
    'P01' 
    'P07' 
    'P10' 
    'P11' 
    'P12' 
    'P13' 

B.

에 존재하지 때문에 A2는 반환되지 않습니다?

C = 
    'A1' 
    'A3' 
    'A4' 

미리 도움을 주셔서 감사합니다.

+0

당신은 무엇을 시도? – bla

+0

이것은 R과 어떤 관련이 있습니까? – jonsca

답변

2
aux = cellfun(@(c) A(~cellfun('isempty', strfind(A(:,3), c)), 1), B, 'UniformOutput', 0); 
C = unique(vertcat(aux{:})); 
+0

'c'가 '1'과 같은 행을 가져와야합니다. 나는 이것을 시도했지만 작동하지 않는다 : ... cellfun ('isempty', strfind (listAllPara (: 3), c) || ​​c == '1') ... – TimeIsNear

+0

@TimeIsNear 무엇이 보이지 않는가? 당신은 "c"가 "1"과 같은 것을 의미합니다. 'c' 란 무엇입니까? –

2

나는 이것이 괜찮을 것이라고 생각합니다.

A = {'A1', 5 'P01,P02,P03,P04'; 
    'A2' 7, 'P08,P09'; 
    'A3' 8, 'P07'; 
    'A4' 8, 'P10,P11'}; 

B = {'P01'; 'P07'; 'P10'; 'P11'}; 


size(A) 

C = {}; 

% for each row in A 
for ai = 1:size(A, 1) 

    rowA = A(ai, :); 

    firstCol = rowA{1}; 
    thirdCol = rowA{3}; 

    % search if any element of B belongs to string in thirdCol 
    searchResult = cellfun(@(bv) ~isempty(findstr(bv, thirdCol)), B, ... 
             'UniformOutput', false); 

    % change results to matrix 
    searchResult = cell2mat(searchResult)'; 


    % if any element of B in thirdCol then add firstCol to C 
    if any(searchResult) == 1 
     C{end + 1} = firstCol; 
    end 

end 



C 

% gives 
C = 

    'A1' 
    'A3' 
    'A4' 
+0

답변을 해주셔서 감사합니다. 아주 좋은 코드입니다.하지만 "P0"을 검색하면 모든 행이 표시됩니다. 결과는 비어 있어야합니다. – TimeIsNear

관련 문제