Matlab -选择给定条件的行



我有一个单元格变量(Size:2639516x12, Bytes:3863876744, class:cell),我想做一个选择,考虑第一行。例如,如果我输入

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];

使用逻辑索引

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,:);

可以使用以下代码根据a的第一列提取特定的行。

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]

最新更新