Matlab - 选择给定条件的行

时间:2014-06-24 10:43:41

标签: matlab select cell conditional-statements

我有一个单元格变量(大小:2639516x12,字节:3863876744,类:单元格),我想考虑第一行做出选择。所以,例如,如果我有

A:
1997 FD 89
1997 GD 65
1999 FDK 87
2010 UY 123

我想得到

B:
1997 FD 89
1997 GD 65

要进入单元格A,我使用以下代码:

% Transfer csv file to matlab    
Data_file = fopen('Data.csv'); 
Data = textscan(Data_file,'%q %q %q %q %f %f %f %f %s %f %f %f %s %f %s %f %s %f %f %f %s','delimiter',',','headerlines', 1);
fclose(Data_file);

%Convert numbers into strings
F_5=Data{:,5};
F_6=num2cell(Data{:,6});
F_7=num2cell(Data{:,7});

%Get the first 4 numbers within variable F_5
F_5A=max(0,fix(log10(F_5)+1)-4);
F_5B=fix(F_9./10.^F_5A);

%Convert number into string
F_5C = num2cell(F_5B);

%Create new cell A w/ variables I want
A=[F_5C Data{:,1} Data{:,2} Data{:,3} Data{:,4} F_6 F_7];

2 个答案:

答案 0 :(得分:4)

使用逻辑索引

B = A(cell2mat(A(:,1))==1997,:);

感谢excaza提到值可能不会被舍入

如果年份值未正确舍入(即某些单元格的值为1996.999999或1997.0001),则使用

e = 0.001 %\\some small value
B = A(abs(cell2mat(A(:,1))-1997)<e,:);

答案 1 :(得分:1)

您可以使用以下代码根据。

的第一列提取特定行
b=a(~cellfun('isempty',(cellfun(@(x) find(x==1997),a(:,1),'UniformOutput',false))),:);

以下是它的工作原理:

a = 

    [1997]    'FD'     [ 89]
    [1997]    'GD'     [ 65]
    [1999]    'FDK'    [ 87]
    [2010]    'UY'     [123]

b=a(~cellfun('isempty',(cellfun(@(x) find(x==1997),a(:,1),'UniformOutput',false))),:);

b = 

    [1997]    'FD'    [89]
    [1997]    'GD'    [65]