我有一个文本文件D,包含我要阅读的n行和5列。每行代表一个向量。但是,如果值等于NA,我想将其留空:
d
122 12 10 NA NA
110 10 30 45 87
110 12 10 NA NA
..
我这样做:
bid = fopen(D,'r');
bfile = textscan(bid,'%d %d %d %s %s','TreatAsEmpty',{'NA'})
var=122;
IndVar=bfile {:,1}==var;
rest=bfile(:,[2:end])
vecVar=rest(IndVar)
我想从没有NA的行获取向量: vecVar = [12 10]; [10 30 45 87]; [12 10];
我试试这个:
rest= rest(~isnan(rest));
我收到错误:
未定义函数'isnan'用于'cell'类型的输入参数。
我已经玩了一个多小时了,现在仍然无法弄清楚.. 任何帮助将非常感谢!
非常感谢!答案 0 :(得分:2)
答案 1 :(得分:1)
这里是将每行数值放入单元格数组val
的代码:
%'Number of columns'
NC = 5;
%'Read the strings'
f = fopen('test.txt', 'r');
raw= textscan(f, repmat('%s',1,NC));
fclose(f);
if numel(raw) ~= NC
error('Something is wrong with the file format');
else
NR = numel(raw{1});
end;
%'Convert data'
for c = 1:NC
for r = 1:NR
raw{c}{r} = sscanf(raw{c}{r}, '%d');
end;
end;
%'Concatenate rows into val'
val = cell(1,NR);
buf = cell(1,NC);
for r = 1:NR
for c = 1:NC
buf{c} = raw{c}{r};
end;
val{r} = [buf{:}];
end;
您不能使用普通矩阵来存储值,因为存在具有不同数量值的行。这意味着行向量只能存储到单元阵列中。