2012-06-18 3 views
0

아직 까다로운 질문이 아닙니다. 그러나 MATLAB을 배우고 있기 때문에 약간의 어려움을 감탄해야합니다. 개별적으로 (가장 오래된 날짜가 먼저 배치) 첫 번째 열을 기준으로 그들 각각의 정렬 - :MATLAB의 데이터 세트에서 고유 레코드 추출

Input1 = [ 
Date;X1;X2;X3 
2007-06-19;2;1;3 
2007-06-22;1;2;3 
2007-06-01;1;2;3 
2007-06-18;1;2;3 
2007-06-19;1;2;3 
2007-06-20;1;2;3 
2007-06-25;1;2;3 
] 

Input2 = [ 
Date;X1;X2;X3 
2007-06-22;1;2;3 
2007-06-19;1;2;3 
2007-06-25;2;1;3 
2007-06-01;1;2;3 
2007-06-15;1;2;3 
2007-06-18;1;2;3 
2007-06-21;1;2;3 
2007-06-25;1;2;3 
] 

Output1 = [ 
] 

Output2 = [ 
] 

내가하고 싶은 것은 : 음, 우리는 두 개의 데이터 세트가 있다고 가정하자. - 첫 번째 열을 기준으로 각 파일에서 중복 된 항목을 개별적으로 삭제합니다. - 키가 두 데이터 집합에 모두있는 경우에만 두 줄 (각 ​​데이터 집합에 하나씩)을 유지하십시오. - 두 목록의 날짜 요소가 하나씩 동일한 지 확인하는 최종 검사를 수행합니다.

eualin.

답변

2

당신이 시작할 수 있도록, 중복이 정렬 된 목록은 각이 작업을 수행 :

% find the unique values for the first column 
[~, I] = unique(Input1(:,1)); 
% extract the records for each unique value in the first column (sorted) 
SortedAndUnique = Input1(I,:); 

나는 당신이 필요합니다, 당신은 당신이 시작할 수 있도록 나머지

+0

작동하지 않습니다. 어떤 생각? – user706838

+0

아니요, 구체적 일 수 있습니까? 작동하지 않는 것은 무엇입니까? 오류가 있습니까? @High Performance Mark가 제안한 방식으로 데이터를 정리 했습니까? – Dan

+0

정확히. '인덱스가 행렬 크기를 초과합니다.'라는 메시지가 나타납니다. 내가 한 것은 날짜 (첫 번째 열)를 숫자로 변환하는 것입니다. – user706838

3

을 해결 확신 Matlab의 힘을 실제로 발휘할 수 있기 전에 입력 데이터를 약간 정리하십시오.

먼저 '열 머리글', 줄을 잃어 Date;X1;X2;X3입니다. Matlab 배열은 숫자이며, Matlab 문자 배열도 실제로 숫자입니다.

둘째, 각 행 끝에 세미콜론을 넣으십시오. Matlab 배열에 관한 한 세미콜론은 행의 끝이므로 테이블은 열 벡터가 될 위험이 있습니다. 현재 세미콜론이있는 공백이나 쉼표를 사용하고 각 행 끝에 세미콜론을 넣으십시오.

셋째, Matlab 배열은 숫자이며 2007-06-22와 같은 숫자는 숫자가 아닙니다. 그것을 작성 했으므로 Matlab이 문자열로 인식 할 수있는 것이 아닙니다. 그리고 그것을 문자열로 인식한다면 그것은 숫자가 아니기 때문에 입력에 barf가됩니다.

셀 배열이나 구조체로 작업 할 수는 있지만 입력 배열을 숫자로 쉽게 변환 할 수 있습니다.

Input1 = [ 
datenum(datevec('2007-06-19')),2,1,3; 
datenum(datevec('2007-06-22')),1,2,3; 
datenum(datevec('2007-06-01')),1,2,3; 
datenum(datevec('2007-06-18')),1,2,3; 
datenum(datevec('2007-06-19')),1,2,3; 
datenum(datevec('2007-06-20')),1,2,3; 
datenum(datevec('2007-06-25')),1,2,3; 
] 

당신에게 댄 이미 제안했다로 일하기 좋은 숫자 배열을 줄 것이다 : 예를 들어, 다음 식을 평가. datenumdatevec은 Matlab에 내장 된 함수입니다.

1

몇 가지 힌트 :

    당신이
입력 1과 입력 2에 모두있는 키를 찾을 수
  • intersect() 단의 대답에 mentionend로 번호
  • unique()로 날짜를 표현하는 datenum('2007-06-22','yyyy-mm-dd')을 사용할 수 있습니다
  • +0

    OK 얘들 아. 그냥 날짜 (첫 번째 열)를 숫자로 변환 할 수있었습니다. 제 2 단계와 제 3 단계에 대한 힌트를 주시겠습니까? – user706838

    +1

    나는 이미 두 번째 단계를 제공했다. 세 번째 시도 유형 도움이 커맨드 라인에서 교차합니까? – Dan

    +0

    안녕 Dan. 물론 당신의 대답을 봅니다. 당신이 조금 더 자세한 정보를 제공 할 수 있는지 물어보고 싶습니다. 왜냐하면 내가 두려워한다는 것을 이해하지 못하기 때문입니다. – user706838

    관련 문제