如何在MATLAB中将数百个表中的某个值更改为NaN?

时间:2017-11-25 18:56:20

标签: matlab

我收到了一百个文件,其中所有的NaN被误写为“N.A。”#39;。我需要更正所有文件才能在Matlab中进行计算。我写了一些代码如下,但总是抱怨错误。我在代码中尝试使用带引号和不带引号的N.A.但仍然出错。有人可以帮忙吗?我真的不知道代码在哪里出错。

Data = dir('*.xls');
namelist1={Data.name};
for w = 1: numel(Data)
    basefilenamedata=Data(w).name;
    T=readtable(basefilenamedata);
    P=table2array(T);
    P(P ==N.A.) = NaN; % here I also tried P(P =='N.A.') = NaN, but still an error
    W=array2table(P);
    writetable(W,fullfile(DataFolder,[basefilenamedata '.xls']),'Sheet',1,'Range','A1');
end

Error: File: untitled Line: 7 Column: 15
Unbalanced or unexpected parenthesis or bracket.

文件示例1:

colony  center_y    center_x    radii   area
1   1486.035197 1994.842984 52  8494.866535
2   1839.73197  439.5529361 58  10568.31769
3   1173.664471 403.4185646 64  12867.96351
4   N.A.    N.A.    N.A.    N.A.
5   N.A.    N.A.    N.A.    N.A.

文件示例2:

Area    Centroid_1  Centroid_2  MeanGrey    ColonyNum
12984   868.0061614 340.6169901 61  1
12378   1289.909517 253.0196316 67  2
N.A.    N.A.    N.A.    N.A.    3

2 个答案:

答案 0 :(得分:2)

查看standardizeMissing

T0 = readtable(basefilenamedata);
T = standardizeMissing(T0 ,{Inf,'N/A','N.A.'},'DataVariables',{'a','x'}) %change to your data variables name

第二件事,比较matlab中的字符串你应该使用strcmp而不是==

第三件事,您可以看到表格的外观,在命令行中运行open('patients.xls')

答案 1 :(得分:1)

excel文件中的find-replace可以快速解决此问题。无论如何,如果你想以编程方式解决它,我会先解释你发生了什么。

函数readtable尝试启发式地定义表列的类型,在解析它们之前在内部调用detectImportOptions。如果它找到字符串(不同于通常用于表示真NaN的字符串,例如,在此示例中,N.A.)与数字相结合,它可能决定将该特定列解释为字符串列值。

要解决此问题,请致电detectImportOptions,手动修改VariableTypes参数"",然后将其传递给readtable功能。

for w = 1: numel(Data)
    basefilenamedata = Data(w).name;
    opts = detectImportOptions(basefilenamedata);

    % Make sure that your P column type is set as double...
    opts = setvartype(opts,{'double' 'double' 'double' ...});

    T = readtable(basefilenamedata,opts);

    % Go on writing...
end

如果文件完全相同,您也可以在循环外使用第一个文件执行此操作,然后将相同的opts传递给所有readtable个电话。

这种方法比清理您的输入要快得多,在解析数据后清理数据以及所有这些方法......尤其是如果您可以为所有文件使用单个选项。