使用列均值将函数应用于矩阵中的所有列

时间:2018-07-03 08:49:45

标签: r apply lapply sapply

我有一个矩阵m(由三列组成,每列由整数组成,均值分别为5,10和15):

m <- round(matrix(data=cbind(rnorm(30, 5), rnorm(30, 10), rnorm(30, 15)), nrow=30, ncol=3), 0)

现在,我想拥有一个与m维度相同的矩阵,其中每个值x都计算为x减去找到x的列的平均值。如何才能做到这一点?我尝试应用各种应用功能(具体来说,我一直在研究user3640617User60的两个问题),但问题似乎是我不能使用行均值作为sapplylapplyvapply中的参数...

示例:如果head(m)

     [,1] [,2] [,3]
[1,]    6   11   14
[2,]    6    8   16
[3,]    6   11   15
[4,]    6   10   17
[5,]    5    9   15
[6,]    3   10   15

我想得到

     [,1] [,2] [,3]
[1,]    1    1   -1
[2,]    1   -2    1
[3,]    1    1    0
[4,]    1    0    2
[5,]    0   -1    0
[6,]   -2    0    0

2 个答案:

答案 0 :(得分:5)

一种方法是使用apply(m, 2, function(x)(x-mean(x)))

另一种方法是使用t(t(m)-colMeans(m))

答案 1 :(得分:4)

您正在寻找

scale(m,center=T,scale=F)[,]

另一种方法是

sweep(m,2,colMeans(m)) 

但不如scale