2016-07-04 60 views
1

我有一個問題,我希望你能幫助我。在Matlab中組織大型數據集

我已導入在Matlab大的數據集(200000×5細胞),其具有以下結構:

'Year' 'Country' 'X' 'Y' 'Value'

列1和5包含數值,而列2至4包含字符串。

我想安排所有這些信息到一個變量,將具有以下結構:

NewVariable{Country_1 : Country_n , Year_1 : Year_n}(Y_1 : Y_n , X_1 : X_n)

所有我能想到的是在整個數據集找到的名稱之間的匹配環Country,Year,XY變量結合ifstrcmp函數,但這似乎是實現我所要做的最無效的方式。

任何人都可以幫我嗎?

在此先感謝。

+1

寫一些功能第一,後期擔心優化。 – excaza

+0

感謝提示excaza。關鍵是可能有一個功能我不知道可以用來做到這一點。否則,我將不得不循環遍歷整個數據集,每次我想提取一個具體的值時,如果不是200000條記錄,而是500萬條記錄,那麼這不是一個真正的選擇。 – aulky11

+1

哦,那裏!請看看分類() – Finn

回答

1

正如評論指出,可以使用絕對數組:

% some arbitrary data: 
country = repmat('ca',10,1); 
country = [country; repmat('cb',10,1)]; 
country = [country; repmat('cc',10,1)]; 
T = table(repmat((2001:2005)',6,1),cellstr(country),... 
    cellstr(repmat(['x1'; 'x2'; 'x3'],10,1)),... 
    cellstr(repmat(['y1'; 'y2'; 'y3'],10,1)),... 
    randperm(30)','VariableNames',{'Year','Country','X','Y','Value'}); 
% convert all non-number data to categorical arrays: 
T.Country = categorical(T.Country); 
T.X = categorical(T.X); 
T.Y = categorical(T.Y); 
% here is an example for using categorical array: 
newVar = T(T.Country=='cb' & T.Year==2004,:); 

table類這樣的事情做了,非常方便。只需展開最後一行T.Country=='cb' & T.Year==2004中的邏輯語句即可滿足您的需求。 告訴我,如果這有幫助;)

+0

感謝您的有用迴應,@EBH!將數據作爲表格導入並使用分類函數正是我所需要的。 :-) – aulky11