我有一张桌子(我在这个问题上称之为'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
您的问题是您有一个逻辑索引矩阵,您希望将其用于索引到表格的类似矩阵的部分。但是,表支持的唯一逻辑索引是引用要选择的行或列的逻辑索引的向量。索引行侧的逻辑向量选择为所有引用列引用的行,反之亦然。它必须是这种方式,因为可能由索引的每个元素引用的可能的混合数据类型会产生歧义。
如果使用数值表的子集作为单独的数字数组,则可以坚持使用逻辑索引:
numbers = T{:,5:10};
numbers(numbers == 999) = NaN;
T{:,5:10} = numbers;
或者您可以逐列工作直接处理表,一次使用一个逻辑向量来索引行:
for ii = 5:10
T{T{:,ii} == 999,ii} = NaN;
end
以下代码行完全符合我的需要。
standardizeMissing(T,999)