R или MATLAB - совпадающее имя столбца для изменения соответствующей ячейки в матрице - PullRequest
2 голосов
/ 04 апреля 2011

Я хотел бы преобразовать столбец с 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 в соответствующие им генные колонки для вывода файла, подобного следующему:

   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 для этого?

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

Екатерина

1 Ответ

1 голос
/ 31 мая 2011

В 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 вашего примера.

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

...