Допустим, у меня есть матрица A:
A = [... %ID Time X
1 0 0.7
1 1 0.1
1 2 -0.5
1 3 -1.6
3 0 0.3
3 1 0.2
3 2 0.0
3 3 -0.2
4 0 0.7
4 1 -0.1
4 2 -0.3
4 3 0.2
5 0 -0.5
5 1 -0.4
5 2 -0.9
5 3 -0.4
8 0 0.5
8 1 1.0
8 2 0.3
8 3 0.4
];
Как вы получите что-то вроде этого (например, Матрица B):
ID Time X
1 0 0.7
1 1 0.1
1 2 -0.5
1 3 -1.6
2 -999 -999
2 -999 -999
2 -999 -999
2 -999 -999
3 0 0.3
3 1 0.2
3 2 0.0
3 3 -0.2
4 0 0.7
4 1 -0.1
4 2 -0.3
4 3 0.2
5 0 -0.5
5 1 -0.4
5 2 -0.9
5 3 -0.4
6 -999 -999
6 -999 -999
6 -999 -999
6 -999 -999
7 -999 -999
7 -999 -999
7 -999 -999
7 -999 -999
8 0 0.5
8 1 1.0
8 2 0.3
8 3 0.4
Каждый раз, когда в столбце «id» есть непоследовательный пробел, я хочу добавить отдельную матрицу с «-999» и пометить столбец «id» соответствующим (т.е. последовательным) идентификационным номером. Обратите внимание, что между ID 5 и ID 8 есть два пробела — в идеале я мог бы заполнить пропущенные значения дважды и соответствующим образом их пометить (например, ID 6 и ID 7).
Я пробовал следующий код, но безуспешно. Обратите внимание, что «данные» — это матрица, подобная матрице A выше. «наполнитель» представляет собой матрицу 3x4 из -999:
-999 -999 -999
-999 -999 -999
-999 -999 -999
-999 -999 -999
Образец кода:
ii = 1; %Starting counter
kk = ii+4; %So I don't start by indexing a row which doesn't yet exist
for ii = 1:4:length(data);
if data(kk,1) ~= data(kk-4,1) + 1; %If there's a gap between the ID values greater than 1, i.e. they are non-consecutive
data = [data(1:kk-1, :); filler; data(kk:end, :)]; %Append the filler column to the part of the matrix where another ID should be
elseif data(kk,1) == -999;
end
end