Replacing Negative Values in Table with Previous Value in Column

I have a table 17520x5, in the last 2 columns I would like to replace all negative values with the previous value in that column. This is what I have tried so far and it is not working I still get negative values shown.
My table (T) had 5 columns, variable labels are (A, B, C, D, E) for each column for example
D(D < 0) = NaN;
E(E < 0) = NaN;
T(:, {'D', 'E'}) = fillmissing(T(:,{'D', 'E'}), 'previous');
disp(T)

 採用された回答

Matt J
Matt J 2021 年 11 月 22 日
編集済み: Matt J 2021 年 11 月 22 日

1 投票

T(:, {'D', 'E'}) = num2cell( fillmissing([D,E], 'previous') );

3 件のコメント

Stef1998
Stef1998 2021 年 11 月 22 日
thank you but this now shows an error that the number of rows does not match the height of the table
Matt J
Matt J 2021 年 11 月 22 日
編集済み: Matt J 2021 年 11 月 22 日
We can try an example to show that it works:
T=array2table( rand(4,5)-0.5 ,'Var',{'A','B','C','D','E'});
D=T{:,4}; E=T{:,5};
D(D < 0) = NaN;
E(E < 0) = NaN;
T,
T = 4×5 table
A B C D E _______ ________ ________ ________ ________ 0.44208 0.49326 0.12868 0.42218 0.43518 0.24954 -0.42086 -0.39169 -0.31886 -0.13442 0.38232 -0.3545 -0.49562 -0.47566 -0.15402 0.28615 0.3741 0.11841 -0.16468 0.48483
T(:, {'D', 'E'}) = num2cell( fillmissing([D,E], 'previous') )
T = 4×5 table
A B C D E _______ ________ ________ _______ _______ 0.44208 0.49326 0.12868 0.42218 0.43518 0.24954 -0.42086 -0.39169 0.42218 0.43518 0.38232 -0.3545 -0.49562 0.42218 0.43518 0.28615 0.3741 0.11841 0.42218 0.48483
Stef1998
Stef1998 2021 年 11 月 22 日
Thank you so much! It worked

サインインしてコメントする。

その他の回答 (1 件)

Peter Perkins
Peter Perkins 2021 年 11 月 23 日

0 投票

Stef, as near as I can tell, the only thing wrong with your original solution is that D and E are in T, not in the workspace. The following works fine, including repeated negative values and negative values in the first row. There's no need to explicitly pull D and E out of the table. Using Matt's setup:
>> T = array2table(rand(4,5)-0.5 ,'Var',["A" "B" "C" "D" "E"])
T =
4×5 table
A B C D E
________ ________ _________ ________ _________
-0.33782 -0.33435 0.18921 -0.27102 0.038342
0.29428 0.10198 0.24815 0.41334 0.49613
-0.18878 -0.23703 -0.049458 -0.34762 -0.42182
0.028533 0.15408 -0.41618 0.32582 -0.057322
>> T.D(T.D < 0) = NaN;
>> T.E(T.E < 0) = NaN
T =
4×5 table
A B C D E
________ ________ _________ _______ ________
-0.33782 -0.33435 0.18921 NaN 0.038342
0.29428 0.10198 0.24815 0.41334 0.49613
-0.18878 -0.23703 -0.049458 NaN NaN
0.028533 0.15408 -0.41618 0.32582 NaN
>> T(:, ["D" "E"]) = fillmissing(T(:,["D" "E"]), 'previous')
T =
4×5 table
A B C D E
________ ________ _________ _______ ________
-0.33782 -0.33435 0.18921 NaN 0.038342
0.29428 0.10198 0.24815 0.41334 0.49613
-0.18878 -0.23703 -0.049458 0.41334 0.49613
0.028533 0.15408 -0.41618 0.32582 0.49613

カテゴリ

ヘルプ センター および File ExchangeTables についてさらに検索

製品

リリース

R2021b

質問済み:

2021 年 11 月 22 日

回答済み:

2021 年 11 月 23 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by