我有一个单元格变量(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]