2016-07-04 36 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