Using diff(x) function to create a new table by subtracting values from the previous row

1 view (last 30 days)
I was trying to create a new table from a set of data that I have. I've attached the dataset to this question and a picture so I can explain what I want to do.
Using this data, I want to first eliminate all the empty boxes (NaNs in matlab) so that the data stacks directly on top of itself. For example, here is an example using a small subset of data.
Now using this data, what I want to do is create a new table that subtracts values of one row from the PREVIOUS row and puts them into a new spot an array. For example, for the previous dataset:
From what I have read so far, I believe the best function to use is the diff(x) documentation but I haven't been able to figure out how to implement the values I receive from it and put them into a new array

Accepted Answer

Stephen23
Stephen23 on 14 Sep 2022
Edited: Stephen23 on 14 Sep 2022
M = readmatrix('Data241.xlsx')
M = 27×66
NaN NaN NaN 28 NaN NaN 14 NaN NaN 21 NaN 42 NaN NaN NaN NaN NaN NaN 16 47 NaN NaN NaN NaN NaN NaN NaN 30 NaN NaN NaN 44 NaN 29 NaN 30 NaN NaN NaN 44 39 44 NaN NaN 15 NaN NaN NaN NaN NaN 46 NaN NaN 11 NaN NaN 36 NaN NaN 24 41 NaN NaN NaN NaN 21 NaN NaN 19 NaN NaN NaN NaN 21 NaN 30 NaN NaN 29 NaN NaN 25 32 NaN 28 20 NaN NaN NaN NaN NaN 41 NaN NaN 41 NaN NaN NaN NaN NaN NaN NaN 59 NaN 31 NaN 30 29 NaN 42 48 NaN NaN NaN 39 NaN NaN NaN NaN 54 NaN NaN 29 NaN NaN NaN 18 25 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 28 39 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 25 NaN NaN NaN NaN NaN 40 NaN NaN NaN 41 NaN NaN NaN NaN NaN NaN NaN NaN 35 32 NaN NaN NaN NaN NaN 38 NaN 29 NaN NaN NaN 16 NaN NaN NaN NaN NaN 37 NaN NaN 16 NaN NaN 11 NaN NaN NaN NaN NaN NaN 45 NaN 32 19 NaN NaN NaN 55 NaN NaN NaN 21 NaN NaN NaN NaN NaN 55 NaN NaN 35 NaN NaN 17 NaN NaN NaN NaN NaN NaN 51 NaN 21 44 NaN NaN NaN NaN 41 NaN 29 NaN 34 NaN NaN NaN 35 38 40 NaN NaN 37 NaN NaN NaN NaN NaN 34 NaN NaN 41 NaN NaN 47 NaN NaN 13
[~,idr] = sort(isnan(M),1);
[~,idc] = ndgrid(1:size(M,1),1:size(M,2));
A = -diff(M(sub2ind(size(M),idr,idc)),1,1)
A = 26×66
12 3 4 -1 25 9 -4 18 -21 -23 2 -2 18 5 -16 -15 19 -15 -13 5 -2 -10 0 -34 -11 -12 17 2 1 -30 -26 0 -31 0 -5 -13 -30 -43 30 9 -18 4 25 -19 -6 8 -6 19 12 -6 14 18 -19 -6 -17 11 -25 19 -22 41 42 -3 1 -17 1 -22 26 NaN -40 -22 17 -2 -26 -5 16 15 -26 NaN -23 33 5 -1 2 10 36 -36 -3 -40 -4 -7 -35 28 23 27 -29 12 -3 NaN -2 25 12 25 8 29 -19 NaN -2 NaN 20 -9 1 -30 22 -1 -11 21 8 3 32 -23 24 -27 -15 -11 9 -1 -22 NaN 41 18 -16 -35 12 -8 7 NaN 27 NaN 2 -24 6 10 12 -9 12 -9 20 22 11 -8 -9 20 NaN 1 NaN 23 7 NaN -30 -8 16 35 NaN -16 -2 NaN NaN NaN -1 24 1 9 -20 16 -2 8 -16 -21 NaN 16 NaN NaN NaN 11 NaN 3 NaN NaN NaN -3 NaN -28 NaN NaN NaN NaN NaN NaN -23 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

More Answers (0)

Categories

Find more on MATLAB in Help Center and File Exchange

Tags

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!