Replacing Negative Values in Table with Previous Value in Column

6 visualizaciones (últimos 30 días)
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)

Respuesta aceptada

Matt J
Matt J el 22 de Nov. de 2021
Editada: Matt J el 22 de Nov. de 2021
T(:, {'D', 'E'}) = num2cell( fillmissing([D,E], 'previous') );
  3 comentarios
Matt J
Matt J el 22 de Nov. de 2021
Editada: Matt J el 22 de Nov. de 2021
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 el 22 de Nov. de 2021
Thank you so much! It worked

Iniciar sesión para comentar.

Más respuestas (1)

Peter Perkins
Peter Perkins el 23 de Nov. de 2021
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

Categorías

Más información sobre Logical en Help Center y File Exchange.

Productos


Versión

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by