# insert specific number of rows into matrix if condition is met and fill new cells with specific value

1 view (last 30 days)
Adriana Schatton on 25 Nov 2019
Commented: Andrei Bobrov on 25 Nov 2019
Hi,
I have a 2-column matrix like this:
a = [1 0; 2 0; 4 0; 8 0]
I would like to change this matrix into a matrix like this:
a_new = [1 0; 2 0; 3 NaN; 4 0; 5 NaN; 6 NaN; 7 NaN; 8 0]
i.e. matrix a with consecutive numbers in the first column and an empty cell or NaN in the added second column.
I managed to insert single rows where they should be inserted:
first_column = a(:,1);
d = diff(first_column);
f = find(d>1);
row = [0, NaN];
a = insertrows(a,row,f)
... giving me this:
a =
1 0
2 0
0 NaN
4 0
0 NaN
8 0
But I would need to insert e.g. only one row after row number 3 but three rows after row number 3.
Moreover, I want the new value of the first column to be consecutive number.
I appreciate your help a lot!!

Andrei Bobrov on 25 Nov 2019
n = max(a(:,1));
out = [(1:n)',nan(n,1)];
out(a(:,1),2) = a(:,2);

Adriana Schatton on 25 Nov 2019
Wow!! This is way more easy than the construction I had in mind!!
Thanks a lot!!
Andrei Bobrov on 25 Nov 2019