如果我有一个像这样的矩阵或数据帧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。
我怎么能得到这个?
答案 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)矩阵的列主存储。