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

问题描述 投票:0回答:2

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

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
matlab datatable nan
2个回答
0
投票

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

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

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

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

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

0
投票

以下代码行完全符合我的需要。

standardizeMissing(T,999)
© www.soinside.com 2019 - 2024. All rights reserved.