在具有多种数据类型的 table 中查找值并将它们设置为 NA 或 NaN
Find values in a table with multiple data types and set them to NA or NaN
我有一个 table(我在这个问题中称之为 'T')大约为 105 x 10,其中第 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;
table 数据如下所示:
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
你的问题是你有一个逻辑索引矩阵,你想用它来索引你的 table 的类似矩阵的部分。然而,tables 支持的唯一逻辑索引是 vectors 逻辑索引引用哪些行 or[=21] =] 列来挑选。索引行侧的逻辑向量选择所有引用列引用的行,反之亦然。它必须是这种方式,因为索引的每个元素可能引用的可能混合数据类型会产生歧义。
如果将 table 的数字子集作为单独的数字数组使用,则可以坚持使用逻辑索引:
numbers = T{:,5:10};
numbers(numbers == 999) = NaN;
T{:,5:10} = numbers;
或者您可以逐列工作以直接处理 table,一次使用一个逻辑向量来索引行:
for ii = 5:10
T{T{:,ii} == 999,ii} = NaN;
end
下面这行代码正是我所需要的。
standardizeMissing(T,999)
我有一个 table(我在这个问题中称之为 'T')大约为 105 x 10,其中第 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;
table 数据如下所示:
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
你的问题是你有一个逻辑索引矩阵,你想用它来索引你的 table 的类似矩阵的部分。然而,tables 支持的唯一逻辑索引是 vectors 逻辑索引引用哪些行 or[=21] =] 列来挑选。索引行侧的逻辑向量选择所有引用列引用的行,反之亦然。它必须是这种方式,因为索引的每个元素可能引用的可能混合数据类型会产生歧义。
如果将 table 的数字子集作为单独的数字数组使用,则可以坚持使用逻辑索引:
numbers = T{:,5:10};
numbers(numbers == 999) = NaN;
T{:,5:10} = numbers;
或者您可以逐列工作以直接处理 table,一次使用一个逻辑向量来索引行:
for ii = 5:10
T{T{:,ii} == 999,ii} = NaN;
end
下面这行代码正是我所需要的。
standardizeMissing(T,999)