在具有多种数据类型的表中查找值并将其设置为NA或NaN

时间:2019-04-10 07:37:31

标签: matlab datatable nan

我有一个大约105 x 10的表(在这个问题中我称为“ T”),其中第2列和第3列包含字符串,其余所有列均包含数字。 在第5到10列(仅包含数字)中,我在要设置为NA或NaN的数据中散布了一些999的值。 我怎样才能做到这一点? 我尝试过:

idx = T{:,5:10} == 999;
T{idx} = NaN;
T(ismissing(T,{999})) = NaN;
T{T==999}=NaN;
T(T{:,5:10}==999,:) = NaN;

表数据如下:

1   'LevelTwo'  'Trial1'    0   -0.354977112125573  -0.342962246562734  999 999 999 999
1   'LevelTwo'  'Trial1'    1   -0.185281358489472  0.196843601863376   0.191455534789190   0.191455534789190   0.196337466839364   0.239420563280515
1   'LevelTwo'  'Trial1'    1   0.393217912708115   0.301686005068917   -0.167798347008035  -0.167798347008035  -0.107991484625157  0.108461970332887
1   'LevelTwo'  'Trial1'    1   -0.145362442084958  -0.327523065746791  0.184717880799754   0.184717880799754   0.0848972787264908  0.166202231586311
1   'LevelTwo'  'Trial2'    1   -0.309966518338289  -1.67389513513988   0.186656639405178   0.186656639405178   -0.0898354852721748 -0.232764706067819
1   'LevelTwo'  'Trial2'    1   -0.0677751233445754 0.131643384129556   0.320810761759298   0.320810761759298   0.244546397660921   0.277629762491316
1   'LevelTwo'  'Trial2'    1   -0.180564795679273  0.101929692518556   -0.134486855393823  -0.134486855393823  -1.61383942825616   0.100825254423938
1   'LevelTwo'  'Trial3'    0   999 999 999 999 999 999
1   'LevelTwo'  'Trial3'    1   -0.281085702707834  -0.0950243910429598 -0.0856708961622575 -0.0856708961622575 -0.221969474699963  -0.158533022159099
1   'LevelTwo'  'Trial4'    1   -1.01621209202249   -1.05630974785680   -0.128439670451306  -0.128439670451306  0.216852995526501   0.154914119245274
10  'LevelTwo'  'Trial10'   0   -2.60256948228157   -2.21021399689544   -0.513562238953105  -0.513562238953105  -0.918985308726539  -1.11565199530760
10  'LevelTwo'  'Trial11'   0   0.638560227147980   -0.660529540036614  -0.0354971842584826 -0.0354971842584826 999 999

2 个答案:

答案 0 :(得分:0)

您的问题是您有一个逻辑索引矩阵,您想使用该逻辑索引将其索引到表的类似矩阵的部分中。但是,支持的唯一逻辑索引是逻辑索引的 vectors ,它们引用要选择列的行。索引行侧的逻辑向量选择所有引用列的引用行,反之亦然。之所以必须这样,是因为可能由索引的每个元素引用的可能的混合数据类型会产生歧义。

如果将数字的表子集作为单独的数字数组使用,则可以坚持使用逻辑索引:

numbers = T{:,5:10};
numbers(numbers == 999) = NaN;
T{:,5:10} = numbers;

或者您可以逐列工作以直接处理表,同时使用一个逻辑矢量一次索引行:

for ii = 5:10
    T{T{:,ii} == 999,ii} = NaN;
end

答案 1 :(得分:0)

下面的代码行完全符合我的需求。

standardizeMissing(T,999)