如何从每一行中减去行均值

时间:2019-02-23 16:25:56

标签: r matrix

如果我有一个像这样的矩阵或数据帧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 :(得分:4)

您可以只使用功能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

答案 1 :(得分:4)

使用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的建议,将行均值减去即可,但这仅是由于R的两个基本属性之间的相互作用:(1)在不等长向量上操作时,向量自动复制到适当的长度; (2)矩阵的列主存储。