2014-05-24 3 views
1

문자열 요소가있는 5 개의 열과 약 5000 개의 행이있는 셀 배열이 있습니다. 예컨대 :Matlab에서 문자열 요소가있는 셀 배열의 변경 내용을 추적하십시오.

1997 찰스 하우스 재료 화학

세월이 1997 년부터 2013 가서 년이 지나가는 동안 반복을 찾을 수 있습니다. 내가 얻고 자하는 것은 두 번째와 세 번째 컬럼의 조합이 변경되는 경우를 가진 새로운 셀 어레이입니다. 예 : 원래 셀 어레이 :

1997 찰스 하우스 재료 화학 % 초기

1997 리타 사무실 금융 은행 % 초기

1998 리타 사무실 금융 은행 % 변화 없음

1999 찰스 하우스 재료 화학 % 변경 없음

2000 년 찰스 사무용 재료 화학 제 2 칼럼에서 % 변경

2001 찰스 사무실 재료 화학 % 변화 없음

2 열 2003 리타 별 금융 은행 % 변화가

2 열 2005 년 찰스 성 재료 화학 % 변화

2010 리타 달 금융 은행 % 두 번째 열의 변경

내 새 배열이 나에게 첫 번째/원래 행을 제공하고 싶다면 변경을 관찰하고 싶습니다. 예 : 출력 :

1997 찰스 하우스 재료 화학

1997 리타 사무실 금융 은행

2000 찰스 사무실 재료 화학

2003 리타 별 금융 은행

2005 찰스 성 재료 화학

2010 리타 문 피안시 al Bank

내 문제는 주로 문자열을 처리한다는 사실과 관련이 있습니다. 내가 도와 주면 감사하겠습니다. 귀하의 가용성에 대해 감사드립니다. 올해는 중요하지 않기 때문에

답변

2

코드 모든

%// Assuming input_cellarr is the input cell array 

[~,~,col2id] = unique(input_cellarr(:,2),'stable') 
[~,~,col3id] = unique(input_cellarr(:,3),'stable') 

[~,unqrows] = unique([col2id col3id],'rows','stable') 
out = input_cellarr(unqrows,:) %// Desired output 
0

첫째, 나는 첫 번째 열을 필터링. 그런 다음 이전 줄과 다음 줄을 비교해야합니다. 이 작업은 X(1:end-1,2:end)X(2:end,2:end))을 사용하여 수행됩니다. 행 현명한 경우에만 아무것도 변경되지 않습니다.

changes=all(strcmpi(X(1:end-1,2:end),X(2:end,2:end)),2) 
%at this point we are missing the first line 
changes=[true;changes] 
%finally use logical indexing to select the relevant data. 
result=X(changes,:); 
+0

나는 당신의 코드를 시험해 보았다. 그러나 이상하게도 결과는 하나의 행만있는 셀 배열을 얻는다. – user3557054

관련 문제