首页 > 解决方案 > 如何从每一行中减去行均值

问题描述

如果我有这样的矩阵或数据框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

这意味着新矩阵的rowmeans全为0。

我怎样才能得到这个?

标签: rmatrix

解决方案


使用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) 矩阵的主要列存储。


推荐阅读