【发布时间】:2017-12-29 18:57:06
【问题描述】:
假设我有矩阵 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”列中存在非连续间隙,我想添加一个带有“-999s”的单独矩阵,并用适当的(即连续的)ID 号标记“id”列。请注意 ID 5 和 ID 8 之间如何存在两个间隙 - 理想情况下,我可以填写两次缺失值并相应地标记它们(例如,ID 6 和 ID 7)。
我尝试了以下代码,但没有成功。请注意,“数据”是一个类似于上面的矩阵 A 的矩阵。 'filler' 是一个 -999s 的 3x4 矩阵:
-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
【问题讨论】: