2016-01-15 5 views
1

У меня есть данные взаимодействия белка с белком homo sapiens. Размер матрицы равен < 4850628x3>. Первые две колонки - это белки, а третья - ее уверенный результат. Проблема состоит в половину строки повторяющиеся парыMatlab: Удаление повторяющихся взаимодействий

, если белок А взаимодействует с В, С, D. он упоминается как

  • AB 0.8
  • переменного тока 0,5
  • AD 0.6
  • Б.А. 0.8
  • СА 0,5
  • Д.А. 0,6

Если вы будете наблюдать уверенную партитуру взаимодействующего с B и B, взаимодействующей с А 0,8

Если у меня есть матрица < 4850628x3> половина строки повторяющиеся пары. Если я выберу Unique (1, :), я могу потерять некоторые данные.

Но я хочу < 2425314x3> i.e без дубликатов пар. Как я могу сделать это эффективно?

Благодаря Naresh

+0

Если вы сортируете по столбцу 1, не можете ли вы просто сбросить вторую половину строк? Это предполагает, что всегда будут пары – Dan

+1

@ Dan Я предполагаю, что где-то вниз по линии, протеин C будет взаимодействовать с D. Если вы удалите нижнюю половину строк, строка 'CD ...' будет удалена вместе с 'DC. ..'. Вам нужно принудительно выполнить некоторый порядок на белках и удалить строки, в которых 'col 1> col2'. – beaker

ответ

0

предположив, что в вашей матрице хранить каждые белка с уникальным идентификатором.
(Например: A = 1, B = 2, C = 3 ...) ваш пример матрица будет:

M = 

    1.0000 2.0000 0.8000 
    1.0000 3.0000 0.5000 
    1.0000 4.0000 0.6000 
    2.0000 1.0000 0.8000 
    3.0000 1.0000 0.5000 
    4.0000 1.0000 0.6000 

Вы должны сначала sort две первые колонки построчно, так что вы всегда будете иметь белковые пары в том же порядке:

M2 = sort(M(:,1:2),2) 

M2 = 

    1  2 
    1  3 
    1  4 
    1  2 
    1  3 
    1  4 

затем использовать unique со вторым параметром rows и сохранить индексы уникальных пар:

[~, idx] = unique(M2, 'rows') 

idx = 

    1 
    2 
    3 

Наконец, отфильтруйте исходную матрицу, чтобы сохранить уникальные пары.

R = M(idx,:) 

R = 

    1.0000 2.0000 0.8000 
    1.0000 3.0000 0.5000 
    1.0000 4.0000 0.6000 

Et voilà!

Смежные вопросы