我有一个单元格变量(大小: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];
答案 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]