2017-11-09 4 views
2

xlsread 명령을 사용하여 Excel 파일에서 데이터를 가져옵니다. 데이터는 다음과 같이 :MATLAB의 Excel 시트에서 데이터 서식 지정

A = [NaN 1 2 3; 
    20160101 100 80 90; 
    20170101 150 90 200] 

Excel에서, 내가 피벗 테이블을 사용 :

enter image description here

내가 출력처럼 보이도록 이러한 데이터를 포맷하고 싶습니다. MATLAB에 상응하는 것이 있습니까? 아니면 어떻게 코딩 할 것입니까? 여기에 reshape 옵션이 있습니까?

답변

1

나는 다음과 같이 파일에서 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 
+0

이 답변은 훌륭합니다. 이 문제에 대한 또 하나의 질문이 있습니다 (새로운 질문을 열어 봐야 할 지 확신 할 수 없습니다). 중복이 있다면 어떨까요? 20160101에 100이라는 값을 갖는 두 개의 값이 있다고 가정 해 보겠습니다. 코드는 출력에서이 두 값의 합을 구합니다. 따라서 20160101 200 80 200이됩니다. 이상하게도 100으로 남겨 둘 것입니다. – Joe

+1

@Joe : 중복 된 항목을 처리하는 방법에 대한 설명을 추가했습니다. – gnovice