나는 다음과 같이 파일에서 reading your data입니다 가정합니다 : 당신에게 당신의 데이터를 포함하는 숫자 매트릭스를 제공
data = xlsread('your_file.xls');
합니다. unique
을 사용하여 첫 번째와 마지막 열을 파싱 한 다음 결과를 accumarray
의 인덱스로 사용하여 가운데 열의 데이터를 수집하여 재구성 할 수 있습니다.
A =
NaN 1 2 3
20160101 100 80 200
20170101 150 90 200
중복 항목 (같은 날짜와 식별자가 즉, 항목)가있는 경우 : 위의 샘플 데이터를
[rowVals, ~, rowIndex] = unique(data(:, 3));
[colVals, ~, colIndex] = unique(data(:, 1).');
A = accumarray([rowIndex colIndex], data(:, 2));
A = [NaN colVals; rowVals A];
그리고 그 결과, 그런 다음 당신은 행과 열 레이블을 추가 , 위 내용은 기본적으로 이들을 합산합니다. 다른 작업을 원할 경우 function handle ~ accumarray
을 제공 할 수 있습니다. 예 :
A = accumarray([rowIndex colIndex], data(:, 2), [], @mean); % Averages them
A = accumarray([rowIndex colIndex], data(:, 2), [], @(x) x(1)); % Keeps the first entry
이 답변은 훌륭합니다. 이 문제에 대한 또 하나의 질문이 있습니다 (새로운 질문을 열어 봐야 할 지 확신 할 수 없습니다). 중복이 있다면 어떨까요? 20160101에 100이라는 값을 갖는 두 개의 값이 있다고 가정 해 보겠습니다. 코드는 출력에서이 두 값의 합을 구합니다. 따라서 20160101 200 80 200이됩니다. 이상하게도 100으로 남겨 둘 것입니다. – Joe
@Joe : 중복 된 항목을 처리하는 방법에 대한 설명을 추가했습니다. – gnovice