Effacer les filtres
Effacer les filtres

Moving NaN elements from the last columns to the first column, iteratively

2 vues (au cours des 30 derniers jours)
gd94
gd94 le 10 Juin 2019
Commenté : TADA le 11 Juin 2019
Hello community,
I'm struggling to figure out a way to automatize a problem I'm confronting on Matlab. Here is a fictitious matrix that replicates my issue (mine is much bigger, but always has between 0 and 2 NaN observations at the end of the matrix):
A = [1 2 3 4 5 6 7 8 NaN NaN;
1 2 3 4 5 6 7 8 9 NaN;
1 2 3 4 5 6 7 8 9 10]
For those rows that have NaNs, I want to move the NaN observations to the front of the matrix, so as to have this;
A = [NaN NaN 1 2 3 4 5 6 7 8;
NaN 1 2 3 4 5 6 7 8 9;
1 2 3 4 5 6 7 8 9 10]
This is a code which works for me with a row vector (i.e A = [1 2 3 4 5 6 7 8 NaN NaN]):
while isnan(A(end))
A = A(1:end-1);
A = [NaN,A];
end
I can't seem to figure out how to broaden the loop to the general case presented above (the 3x10 matrix).
Thank you!

Réponse acceptée

TADA
TADA le 10 Juin 2019
Modifié(e) : TADA le 11 Juin 2019
The simplest way would be to loop through the rows:
i = isnan(A);
for j = 1:size(A,1)
A(j,:) = [A(j,i(j,:)) A(j,~i(j,:))];
end
Another approach:
a1 = A';
[~, ord] = sort(~isnan(a1));
ord2 = ord + repmat(0:size(a1,1):numel(a1)-1, size(a1,1),1);
a2 = a1(ord2)'
  3 commentaires
gd94
gd94 le 11 Juin 2019
Works.... great! Thank you so much TADA
TADA
TADA le 11 Juin 2019
cheers no problem

Connectez-vous pour commenter.

Plus de réponses (1)

Bob Thompson
Bob Thompson le 10 Juin 2019
Do you want your numeric values in ascending order? If so you should be able to do the following:
A = sort(A,2,'MissingPlacement','first');
  1 commentaire
gd94
gd94 le 11 Juin 2019
No, not necessarily. The 1 2 3 ..... 9 were just examples of numbers, but they need not be in ascending order. The order should just be maintained when moving the NaNs to the front.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Produits


Version

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by