R или MATLAB - Соответствующее имя столбца для изменения соответствующей ячейки в матрице

Я хотел бы преобразовать столбец с NODE в качестве заголовка в матрице ниже в соответствующий ген следующим образом:

   NODE Gene1 Gene2 Gene3 Gene4 Gene5 NODE1 NODE2 NODE3
1 NODE1  0.98  0.98    NA    NA    NA    NA    NA    NA
2 NODE2    NA    NA   0.8   0.8    NA    NA    NA    NA
3 NODE3    NA    NA    NA    NA  0.72  0.72    NA    NA
4 NODE4    NA    NA    NA    NA    NA    NA   0.6   0.6

As

NODE1 = Gene1 and Gene2
NODE2 = Gene3 and Gene4
NODE3 = Gene5 and NODE1 = Gene5 and Gene 1 and Gene2

Я хотел бы переместить ячейки в столбцах NODE1 NODE2 и NODE3 в соответствующие столбцы Gene, чтобы вывести такой файл:

   NODE Gene1 Gene2 Gene3 Gene4 Gene5 
1 NODE1  0.98  0.98    NA    NA    NA    
2 NODE2    NA    NA   0.8   0.8    NA    
3 NODE3  0.72  0.72    NA    NA  0.72    
4 NODE4  0.6   0.6     NA   0.6  0.6  

Есть ли способы сделать это? Могу ли я использовать R или MATLAB для этого?

С наилучшими пожеланиями,

Екатерина


person Catherine    schedule 04.04.2011    source источник
comment
Я не могу сказать, что полностью понимаю ваш желаемый результат. Чему соответствует NODE4?   -  person Roman Luštrik    schedule 04.04.2011
comment
Node4 означает Node2 и Node3. Таким образом, они также представляют соответствующие гены в node2 и node3. не могли бы вы дать мне несколько советов, как это сделать с R?   -  person Catherine    schedule 06.04.2011


Ответы (1)


В Matlab это можно сделать так:

    clear all
    nrgenes=5;
    nrnodes=4;
    matrix=zeros(nrnodes,nrgenes+nrnodes);
    matrix(1,1:2)=0.98;
    matrix(2,3:4)=0.8;
    matrix(3,5:6)=0.72;
    matrix(4,7:8)=0.6;

    for i=1:nrnodes
        for j=nrgenes+1:nrgenes+nrnodes
            if (matrix(i,j)~=0)
                matrix(i,1:nrgenes)=matrix(i,1:nrgenes)+matrix(i,j)*logical(matrix(j-nrgenes,1:nrgenes));
            end
        end
    end
    result=matrix(1:nrnodes,1:nrgenes);

Некоторые предостережения:

  • Возможно, вам придется запустить это дважды, чтобы развернуть все записи, в зависимости от конфигурации записей, но я думаю, вы поняли, как это сделать, из кода.

  • есть небольшая ошибка в строке Node4 результата вашего примера.

  • Это кодируется двумя вложенными циклами for. Медленно и неэффективно для больших матриц, но проще для понимания. Возможно, вам придется векторизовать большие матрицы, чтобы сократить время выполнения.

person Christoph    schedule 31.05.2011