Заменить NaN на указанное выше значение (для соответствующих идентификаторов) - Matlab - PullRequest
0 голосов
/ 10 октября 2011

У меня есть матрица с идентификаторами Col1 и значениями Col2.

mat = [ ...
      1000 3
      1000 4
      1000 nan
      1000 nan
      1000 5

      2222 1
      2222 2
      2222 nan

      3333 nan

      4444 1 ] ;

Мне нужно заменить nan значением в строке над ним, но при условии: строка выше должна иметь такой же идентификатор.

Ответ:

mat = [ ...
      1000 3
      1000 4
      1000 4
      1000 4
      1000 5

      2222 1
      2222 2
      2222 2

      3333 nan

      4444 1 ] ;

Можете ли вы предложить векторизованный подход?

1 Ответ

4 голосов
/ 11 октября 2011

Этот код не будет обрабатывать последовательные NaN с одним и тем же идентификатором.

inds = find([mat(2:end,1)==mat(1:end-1,1)] & isnan(mat(2:end,2)))
mat(inds+1,2) = mat(inds,2)

Запуск его дважды на примере данных завершает задачу.

...