扫除colMeans和rowMeans

时间:2011-09-11 18:27:28

标签: r

分别从列,行和观察中扫出colMeans,rowMeans和mean,我使用以下代码:

a <- matrix(data=seq(from=2, to=60, by=2), nrow=6, ncol=5, byrow=FALSE)
b <- matrix(data=rep(colMeans(a), nrow(a)), nrow=nrow(a), ncol=ncol(a), byrow=TRUE)
c <- matrix(data=rep(rowMeans(a), ncol(a)), nrow=nrow(a), ncol=ncol(a), byrow=FALSE)
d <- matrix(data=rep(mean(a), nrow(a)*ncol(a)), nrow=nrow(a), ncol=ncol(a), byrow=FALSE)
e <- a-b-c-d

可以使用此命令扫描colMeans

a1 <- sweep(a, 2, colMeans(a), "-")

是否有任何单一命令可以清除colMeans,rowMeans和意思?提前谢谢。

2 个答案:

答案 0 :(得分:2)

在这个例子中,您认为e应该是什么样子?也许您的行应为e <- a-b-c+d,以便e具有零均值。

以下代码使用bcd生成与计算相同的结果(使用算术级数示例,矩阵为0)。如果你坚持,请将+更改为-

 e <- t(t(a) - colMeans(a)) - rowMeans(a) + mean(a)   

答案 1 :(得分:1)

不是我知道的,但为什么不写自己的呢?它只有四行:

meanSweep <- function(x){
    tmp <- sweep(x,2,colMeans(x),"-")
    tmp <- sweep(tmp,1,rowMeans(x),"-")
    tmp <- tmp - mean(x)
    tmp
}

all.equal(e,meanSweep(a))
[1] TRUE