# Row combination for repeated values

3 views (last 30 days)
Maha on 21 Feb 2020
Commented: Maha on 25 Feb 2020
Hello,
I have different variables (date, time, lat, lon) and X for different depths, where each column represents n times (number of different depths) the same variable at a different depth, let say 0 m, 100 m, 500 m. Here a more explicit example :
A = [20200101, NaN, NaN, 1200, NaN, NaN, 90, NaN, NaN, 45, NaN, NaN, 2, NaN, NaN; % 0 m
NaN, 20200101, NaN, NaN, 1200, NaN, NaN, 90, NaN, NaN, 45, NaN, NaN, 3, NaN; % 100 m
NaN, NaN, 20200101, NaN, NaN, 1200, NaN, NaN, 90, NaN, NaN, 45, NaN, NaN, 4 ]; % 500 m
How can I keep the repeated band combinations for date, time, latitude and longitude, so my final output would be, for each unique Date / Time / Lat / Lon :
B = [20200101, 1200, 90, 45, 2, 3, 4]; % Date / Time / Lat / Lon / Val 0m / Val100m / Val500m
I was thinking of using a for loop with find
find(A(i,1)==A(:,2) & A(i,1)==A(:,3) etc.)
But I if I have 50 different depths, it will be a lot of combinations. Does anyone has a simpler way in mind ?
Cheers
Jon on 21 Feb 2020
I'm not understanding what the columns in your A matrix represent. In particular how come the date appears in a different column in each row. Similarly why does the latitude appear in a different column. It looks like they shift over by 1 column in each succesive row, but I don't know if this is always the case, and what it means.

Spencer Chen on 21 Feb 2020
Now, you were not very clear on your column structure. I understand it as in:
A = [date.depth1, date.depth2 .. date.depthNtime, lat.depth1, lat.depth2 ..lat.depthN, etc.]
% A = row X (depth and Var)
If that's the case, then something like this code would solve you problem:
nrows = size(A,1);
ndepth = 3;
A2 = reshape(A,nrows,ndepth,[]); % A2 = row X depth X Var
B = squeeze(nansum(A2,2));
The crux of it is to use nansum() to combine and ignore values from other depths. So we restructure the matrix so we can use nansum().
Blessings,
Spencer
Maha on 25 Feb 2020
My actual real matrix looks like A1, from my previous message, with 500k lines, and 10 different depths.
I need the B matrix as a result (every depth information for unique spatial and temporal information).
The solution I've shown just work for a consistent matrix A2, where each line would represent a depth. My A1 / True matrix isn't consistent.
I would like to either
1) switch from A1 to A2, then I could apply my previous solution
or
2) Find a direct solution to transform A1 into B