Как вычесть средние значения ряда из каждого ряда - PullRequest
0 голосов
/ 23 февраля 2019

Если у меня есть матрица или фрейм данных gene, например:

    [,1] [,2] [,3] [,4] 
[1,]    2   12    4   10  
[2,]    3   14    3   9  
[3,]    5   15    4   3  
[4,]    8   6    12   18  

И я уже получаю средства для каждой строки и каждого столбца по:

a <- apply(gene, 1, mean)
b <- apply(gene, 2, mean)

ИТеперь я хочу вычесть из каждой строки средние строки и получить это:

      [,1] [,2] [,3] [,4] 
[1,]   -5   5    -3   3  
[2,] -4.25 6.75 -4.25 1.75    
[3,] -1.75 8.25 -2.75 -3.75  
[4,]    -3   -5    1   7

, что означает, что все строки новой матрицы равны 0.

Как я могу получить это?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Использование sweep():

gene <- matrix(c(2,12,4,10,3,14,3,
                 9,5,15,4,3,8,6,12,18), 
      byrow=TRUE,nrow=4)
gene2 <- sweep(gene, MARGIN=1, STATS= rowMeans(gene))

Вычитание строки означает, как предложено @ G5W works, но только из-за взаимодействия между двумя основными свойствами R: (1) автоматическая репликация векторов наподходящая длина при работе с векторами неравной длины;(2) главное хранилище столбцов матриц.

0 голосов
/ 23 февраля 2019

Вы можете просто использовать функцию rowMeans

gene - rowMeans(gene)
        V1    V2    V3    V4
[1,] -5.00  5.00 -3.00  3.00
[2,] -4.25  6.75 -4.25  1.75
[3,] -1.75  8.25 -2.75 -3.75
[4,] -3.00 -5.00  1.00  7.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...