【发布时间】:2017-03-12 00:19:47
【问题描述】:
我有一个有点大 (48000*53) 的数据集,我正在尝试找到它上面的多元异常值。
但是,每次我尝试诸如 trimmean()、leverage() 之类的函数时,我都会遇到同样的错误。
我的数据集应该没有 NaN 值,但我仍然尝试运行代码 D(find(sum(isnan(D),2)==0),:); 和 D(any(isnan(D),2), :)=[]; 但我得到了同样的错误....
【问题讨论】:
我有一个有点大 (48000*53) 的数据集,我正在尝试找到它上面的多元异常值。
但是,每次我尝试诸如 trimmean()、leverage() 之类的函数时,我都会遇到同样的错误。
我的数据集应该没有 NaN 值,但我仍然尝试运行代码 D(find(sum(isnan(D),2)==0),:); 和 D(any(isnan(D),2), :)=[]; 但我得到了同样的错误....
【问题讨论】:
以下示例从数据集中删除所有包含 NaN 元素的行。
示例基于以下帖子:Matlab. Replace missed values with an avg
检查以下代码示例:
%Create dataset for the example.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
VarName1 = [4; NaN; 6; 7; 6; 6; 6; 5; 5; 6; 6];
VarName2 = [2; 2; 2; 3; 3; 2; NaN; 2; 2; NaN; 3];
VarName3 = {'aa'; 'aa'; 'aa'; 'bbb'; 'bbb'; 'ccc'; 'ccc'; 'ccc'; 'ccc'; 'dddd'; 'dddd'};
D = dataset(VarName1, VarName2, VarName3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Convert dataset to cell array.
C = dataset2cell(D);
%Find all indexes of NaN elements (use anonymous function).
nanIdx = cellfun(@(x)(any(isnan(x))), C);
%Find indexes of rows with NaN elements
nanRows = any(nanIdx,2);
%Keep only rows without NaN elements.
C = C(~nanRows, :);
D = cell2dataset(C);
【讨论】: