我有一个矩阵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的列的平均值。如何才能做到这一点?我尝试应用各种应用功能(具体来说,我一直在研究user3640617和User60的两个问题),但问题似乎是我不能使用行均值作为sapply
,lapply
或vapply
中的参数...
示例:如果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
答案 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