从Matlab表中删除'@NA'

玛丽

我有以下代码来清理错误术语的表数据:

    errorTerms={'@NA', '#NA', 'ActiveX VT_ERROR: '};
inputData=readtable(inputFile,'TreatAsEmpty',errorTerms);

但是,“ @ NA”字样仍然存在。

我可以通过这种方式摆脱它们:

inputData.GICS1=strrep(inputData.GICS1,'@NA','NaN');

但这需要几个独立的循环,因为我有许多不同大小的表。有没有更优雅的方式将这些数据导入为表格?还是打扫干净?

数据如下所示:

Id Avg GICS1
a 3.0 @NA
b 5.6 Consumer Staples
c 4.8 Materials
d 3.1 Health Care
e 1.6 Energy
f 9.3 @NA
g 8.5 Industrials
h 7.0 Consumer Discretionary

您可以使用varfun要经过你的表列并应用正则表达式来使用每一列regexrep和你的errorTerms数组:

inputData = readtable('test.xlsx');

errorTerms = {'@NA', '#NA', 'ActiveX VT_ERROR: '};
expression = sprintf('(%s)', strjoin(errorTerms, '|'));

% Explicit loop
varnames = inputData.Properties.VariableNames;
for ii = 1:length(varnames)
    try
        inputData.(varnames{ii}) = regexprep(inputData.(varnames{ii}), expression, 'NaN');
    catch err
        switch err.identifier
            case 'MATLAB:UndefinedFunction'
                % Do nothing, skip loop iteration
            otherwise
                rethrow(err)
        end
    end
end

% % Only works for string data
% varnames = inputData.Properties.VariableNames;
% inputData = varfun(@(x) regexprep(x, expression, 'NaN'), inputData);
% inputData.Properties.VariableNames = varnames; % Variable names overwritten by varfun, set them back

编辑:我添加了一个try/catch块,以解决您的列中的混合数据类型。我要警告的是,这是一个相当贪婪的实现,一种更可靠的方法是比较错误消息,以确保regexprep是引起问题的原因,但是我很懒。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Matlab 中,如何从表中删除 na 行?

来自分类Dev

如何从kableExtra kbl表中删除NA?

来自分类Dev

R dplyr从表中删除“ <NA>”列

来自分类Dev

使用R从表中删除NA

来自分类Dev

从R中的表(字符)中删除NA字符串

来自分类Dev

在摘要表中包含NA

来自分类Dev

在摘要表中包含NA

来自分类Dev

从R数据表中删除具有“ NA”名称的列和行

来自分类Dev

从列表列表中删除NA

来自分类Dev

不要删除ggplot中的na值

来自分类Dev

dplyr:从group_by变量中删除NA

来自分类Dev

合并R中的多个向量以删除NA

来自分类Dev

从巨大的栅格文件中删除NA值

来自分类Dev

删除特定列R中的NA

来自分类Dev

从Date类变量中删除NA

来自分类Dev

如何用R中的条件删除NA?

来自分类Dev

在熊猫中删除NA(ish?)字段

来自分类Dev

python从包含NA的文本中删除行

来自分类Dev

删除每列中包含NA的行

来自分类Dev

R在逻辑列级别中删除NA

来自分类Dev

删除在r中包含NA的列

来自分类Dev

从巨大的栅格文件中删除NA值

来自分类Dev

删除相关的NA

来自分类Dev

如何删除并填写NA

来自分类Dev

当我在 Matlab 中读入时,如何将 NA 插入到空表的每个值中?

来自分类Dev

表1.9.2中的NA / NaN / Inf

来自分类Dev

从数据框中删除NA,而不删除整个行/列

来自分类Dev

从功能中的R中的列表列表中删除NA

来自分类Dev

Tidyr中的eparate()与NA